Python列表比较函数返回None问题排查与解决
问题分析与修复方案
1. 额外输出None的原因
函数fl在匹配成功的else分支中没有定义返回值,Python中函数默认返回None。而你调用时使用了print(fl(listB, listA)),这会把函数返回的None额外打印出来。
2. 未输出"up"的原因
代码存在多处逻辑错误:
- 遍历对象搞反:应该遍历
list1的子列表,而非list2; - 匹配条件错误:需求是判断子列表前11个元素是否等于
list2,但你写的l[:len(list1)] == list1完全不符合逻辑; - 方向判断逻辑混乱:生成
lp时错误遍历list2,拼接前6个元素的操作毫无意义,应该直接从匹配到的子列表中取方向字段; - 参数传递错误:调用
fl时传了listB, listA,但实际变量名是list1和list2,且参数顺序完全颠倒。
修复后的代码
list1 = [["1", "1", "1", "1", "1", "0", "1", "0", "1", "0", "1", "up", 5], ["1", "0", "0", "1", "1", "0", "1", "0", "0", "0", "0", "up", 2], ["1", "0", "1", "1", "0", "0", "1", "1", "1", "1", "1", "up", 13], ["1", "0", "0", "1", "1", "0", "1", "1", "0", "0", "1", "down", 5], ["0", "0", "1", "0", "1", "0", "1", "1", "1", "0", "1", "up", 8], ["0", "1", "0", "1", "0", "1", "1", "1", "1", "0", "1", "up", 10], ["0", "1", "1", "1", "0", "0", "0", "0", "1", "1", "0", "up", 6], ["1", "1", "0", "1", "1", "1", "0", "0", "0", "0", "0", "down", 8], ["0", "0", "1", "0", "1", "1", "1", "0", "1", "0", "1", "up", 6], ["0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "1", "up", 1], ["0", "0", "0", "0", "0", "1", "1", "1", "0", "1", "0", "up", 3], ["0", "0", "0", "1", "1", "0", "0", "1", "0", "1", "1", "up", 7], ["1", "1", "1", "1", "1", "1", "1", "0", "1", "0", "1", "up", 9], ["0", "0", "0", "1", "0", "0", "0", "0", "1", "0", "1", "down", 7], ["0", "0", "0", "1", "0", "1", "1", "1", "1", "1", "1", "down", 1]] list2 = ["1", "0", "0", "1", "1", "0", "1", "0", "0", "0", "0"] def fl(list1, list2): index = -1 max_occ = 0 direction = "" # 遍历list1的子列表,匹配前11个元素与list2一致的项 for i, sub_list in enumerate(list1): if sub_list[:11] == list2: # 更新出现次数最多的匹配项信息 if sub_list[-1] > max_occ: max_occ = sub_list[-1] index = i direction = sub_list[11] # 直接获取方向字段 if index == -1: print("The first list is not present in the second one.") else: print(f"The first lists appears in the second one at index {index} with a number of occurrences equal to {max_occ}.") print(direction) # 正确传递参数,直接调用函数无需print包裹 fl(list1, list2)
修复后输出
运行上述代码会得到符合预期的结果:
The first lists appears in the second one at index 1 with a number of occurrences equal to 2. up
(注:原预期输出中的索引2是错误的,Python列表索引从0开始,list1中匹配list2的子列表实际位于索引1)
内容的提问来源于stack exchange,提问作者damian2345673
相关产品推荐
相关产品推荐

