如何检查嵌套列表中所有子列表的第3个元素是否相等?
解决嵌套列表子列表第3个元素全部相等的判断问题
错误原因分析
你代码里的index和index2是enumerate()返回的整数索引值,并非子列表本身,所以执行index[2]时会触发TypeError——整数类型不支持下标访问。此外,你的嵌套循环逻辑也存在问题:只要有任意两个子列表的对应元素相等就打印True,无法准确判断所有子列表的第3个元素是否一致。
正确解决方案
方法一:使用all()函数(简洁高效)
直接以第一个子列表的第3个元素为基准,通过all()函数检查所有子列表的对应元素是否与基准相等:
a = [['File1', 0, ' Message to check whether all this are same or not'], ['File1', 1, ' Message to check whether all this are same or not'], ['File1', 2, ' Message to check whether all this are same or not'], ['File1', 3, ' Message to check whether all this are same or not'], ['File1', 4, ' Message to check whether all this are same or not']] # 处理空列表的边界情况(可选) if not a: print(False) else: # 取第一个子列表的第3个元素(索引2)作为基准 base_value = a[0][2] # 检查所有子列表的第3个元素是否等于基准 all_equal = all(sublist[2] == base_value for sublist in a) print(all_equal)
all()函数会遍历生成器表达式中的每一项,只要有一个子列表的元素不匹配就立即返回False,全部匹配则返回True,时间复杂度为O(n),效率最优。
方法二:手动循环判断(适合理解逻辑)
如果想手动实现循环判断,可以遍历列表从第二个元素开始逐一对比:
a = [['File1', 0, ' Message to check whether all this are same or not'], ['File1', 1, ' Message to check whether all this are same or not'], ['File1', 2, ' Message to check whether all this are same or not'], ['File1', 3, ' Message to check whether all this are same or not'], ['File1', 4, ' Message to check whether all this are same or not']] all_equal = True if a: base_value = a[0][2] # 从第二个子列表开始遍历对比 for sublist in a[1:]: if sublist[2] != base_value: all_equal = False break # 发现不相等直接终止循环 print(all_equal)
内容的提问来源于stack exchange,提问作者Manvi
相关产品推荐
相关产品推荐

