Python3如何检查列表中是否存在包含指定子串的单词(非循环实现)
检查列表中是否存在包含指定子串的元素
嗨,这个问题我之前也碰到过,其实Python里有个非常简洁高效的方法,完全不用写显式的for循环就能解决!
核心解法:用any()配合生成器表达式
any()是Python的内置函数,它会遍历一个可迭代对象,只要其中有一个元素为True,就立刻返回True(短路求值,不会浪费时间检查剩余元素)。结合生成器表达式,刚好能满足你的需求:
L = ["money", "fame", "popularity"] has_pop_substring = any("pop" in word for word in L) print(has_pop_substring) # 输出: True
简单解释一下:
- 生成器表达式
"pop" in word for word in L会逐个检查列表里的每个单词,判断"pop"是不是该单词的子串,返回一系列布尔值 any()会快速扫描这些布尔值,只要找到第一个True就停止并返回结果,效率拉满
额外技巧:找到具体包含子串的单词
如果你不仅想知道是否存在,还想拿到那个包含"pop"的单词,可以用next()配合生成器表达式,同时指定默认值避免报错:
target_word = next((word for word in L if "pop" in word), None) print(target_word) # 输出: popularity
这里的None是当列表里没有任何单词包含"pop"时的返回值,这样就不会因为找不到元素而抛出StopIteration异常。
对比字符串的情况
你提到字符串里可以直接用"pop" in L,那是因为字符串本身就是字符的序列,in操作符会检查子串是否存在;而列表的in操作符是检查整个元素是否等于目标值,所以需要逐个元素内部检查——这就是any()派上用场的地方啦~
内容的提问来源于stack exchange,提问作者lab
相关产品推荐
相关产品推荐

