如何在列表中查找连续重复数字并集成至现有Python代码?
搞定连续重复数字的检测需求
嘿,我懂你的意思了——你现在的代码会把列表里所有出现过的重复数字都揪出来,但你要的是仅检测紧紧相邻的连续重复(比如[0,7,3,3,55]里的两个3),而不是像[0,7,3,5,3]这种分散的重复。那我们来修改一下判断逻辑就可以实现啦!
针对你的场景的修改方案
原来的if color in images[:-1]:会检查整个列表(除了最后一个元素)里有没有color,这就会把非连续的重复也包含进去。我们把它改成只对比当前color和列表的最后一个元素——毕竟连续重复的话,它俩肯定是相邻的嘛:
# 替换原来的if判断部分 if images and images[-1] == color: # 先确保列表不为空,再检查最后一个元素是否和color相同 print("Eşi bulundu", *cards[images.index(color)], "ile", *cards[len(images)-1]) if i%2 == 0: esClick(*cards[images.index(color)]) time.sleep(2) # esClick(*cards[len(images)-1]) # time.sleep(2) # 下面的列表操作保持原样就好 images.insert(images.index(color), 256) images.pop(images.index(color)) images.pop() images.append(256) print(images)
为什么这么改?
images先做判断:避免列表为空的时候取images[-1]报错images[-1] == color:直接锁定当前color和它的前一个相邻元素(也就是列表最后一个元素),只有当它俩相等时,才是你要找的连续重复,完美过滤掉分散的重复情况
如果需要检测列表中所有连续重复段
要是你的场景不止是检测新加入的color,而是要扫描整个列表找所有连续重复的数字,那可以写个小辅助函数:
def find_consecutive_duplicates(lst): # 遍历列表,检查每一对相邻元素 for idx in range(len(lst) - 1): if lst[idx] == lst[idx + 1]: return True, lst[idx], idx # 返回:是否有重复、重复数字、重复起始索引 return False, None, None # 用法示例 has_dupe, dupe_num, dupe_idx = find_consecutive_duplicates(images) if has_dupe: print(f"找到连续重复数字:{dupe_num},起始位置在索引{dupe_idx}") # 这里可以加你对应的处理逻辑
这个函数能帮你找出列表里所有相邻的连续重复数字,按需使用就好~
内容的提问来源于stack exchange,提问作者mGungorr
相关产品推荐
相关产品推荐

