Python如何统计两个洗牌后列表首次不匹配前的连续匹配数
列表前置连续匹配数统计实现
需求规则
- 从列表起始索引(索引0)开始,对位对比两个列表的元素
- 仅统计首个不匹配元素出现前的连续匹配元素总数
- 首个不匹配位置之后的所有元素,无论是否对位相等,都不纳入统计
参考示例
初始定义两个完全一致的列表:
list1 = [1,2,3,4,5,6] list2 = [1,2,3,4,5,6]
对两个列表分别洗牌后,需要计算本次洗牌结果的对位匹配数。例如某次洗牌结果为:
shuffled_list1 = [2,4,5,3,1,6] shuffled_list2 = [2,4,5,1,3,6]
结果计算说明:前3位元素(索引0、1、2)2、4、5完全对位匹配;索引3位置两个列表元素分别为3和1,是首个不匹配位置;后续索引5位置的6虽然匹配,但出现在不匹配项之后,不计入统计,最终返回匹配数为3。
实现代码(Python)
import random def count_prefix_match(list_a, list_b): match_count = 0 for item_a, item_b in zip(list_a, list_b): if item_a != item_b: break match_count += 1 return match_count if __name__ == "__main__": # 初始化原始列表 list1 = [1,2,3,4,5,6] list2 = [1,2,3,4,5,6] # 执行洗牌 random.shuffle(list1) random.shuffle(list2) print(f"洗牌后列表1:{list1}") print(f"洗牌后列表2:{list2}") print(f"前置连续匹配数:{count_prefix_match(list1, list2)}")
逻辑说明
- 用
zip同步遍历两个列表的对位元素,若两个列表长度不一致,会自动以更短的列表长度为遍历上限,避免索引越界 - 遍历过程中遇到第一对不相等的元素直接终止循环,返回当前累计的匹配数
- 若两个列表完全一致,会遍历完所有元素,返回列表总长度,符合统计规则
内容的提问来源于stack exchange,提问作者Jfetto
相关产品推荐
相关产品推荐

