Python:判断字符串不存在于嵌套列表时结果异常的问题排查
问题原因分析与解决办法
嘿,这个问题的核心是你误解了Python中in运算符在嵌套列表上的工作方式!
先看你的代码生成的列表:lst = [ ['null']*4 for n in xrange(2) ],实际生成的是嵌套列表:
[['null', 'null', 'null', 'null'], ['null', 'null', 'null', 'null']]
当你用'null' not in lst做判断时,in运算符只会检查外层列表的直接成员——也就是那两个子列表,而不会自动深入子列表内部去查找元素。外层列表里根本没有直接存储'null'字符串,所以这个判断会返回True,自然每次都会打印"testing"。
怎么正确检查嵌套列表中是否存在"null"?
你需要遍历外层列表的每个子列表,再检查子列表内部的元素:
方法1:普通循环遍历
lst = [ ['null']*4 for n in xrange(2) ] print(lst) has_null = False for sublist in lst: if 'null' in sublist: has_null = True break # 找到就停止遍历,提升效率 if not has_null: print("testing")
方法2:用生成器表达式+any()函数(更简洁)
any()函数会在迭代器中有任意一个元素为True时返回True,正好适合这个场景:
lst = [ ['null']*4 for n in xrange(2) ] print(lst) if not any('null' in sublist for sublist in lst): print("testing")
这样修改后,就能正确判断嵌套列表中是否存在'null',只有当所有子列表里都没有'null'时,才会打印"testing"。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

