如何将Python3中判断列表元素的循环代码转换为推导式?
将循环代码转换为更简洁的Python表达式
嘿,刚好可以用Python的any()函数配合生成器表达式来实现,比列表推导式更贴合你的需求(毕竟我们只需要判断是否存在符合条件的元素,不需要生成完整列表),完全等价于你原来的循环逻辑:
第一个代码段转换
原循环代码:
for i in nli: if i not in fli: f = True
转换后的简洁写法:
f = any(i not in fli for i in nli)
第二个代码段转换
原循环代码:
for i in list1: if i not in list2: flag = True
转换后的简洁写法:
flag = any(i not in list2 for i in list1)
额外小优化
如果你的对比列表(fli或list2)元素较多,建议先转成集合,这样成员判断的效率会大幅提升:
# 针对第一个例子的优化 fli_set = set(fli) f = any(i not in fli_set for i in nli) # 针对第二个例子的优化 list2_set = set(list2) flag = any(i not in list2_set for i in list1)
原理说明:any()会遍历生成器中的每个元素,只要有一个元素满足i not in 对比列表的条件,就会立即返回True,和你原来的循环逻辑完全一致——只要找到第一个符合条件的元素就设置标志位为True。如果所有元素都在对比列表里,any()会返回False,对应标志位保持初始的False状态。
内容的提问来源于stack exchange,提问作者Sahana J C
相关产品推荐
相关产品推荐

