我想检查一个字符串是否包含列表中的一个元素:
l = ['S', 'R', 'D', 'W', 'V', 'Y', 'H', 'K', 'B', 'M']
s = 'YTG'
第一种解决方案是:
for i in l:
if i in s:
print i
虽然这看起来效率不高。我尝试了以下代码,但它给了我列表的最后一个元素 'M'
而不是 'Y'
:
if any(i in s for i in l):
print i
我想知道这里有什么问题?
谢谢!
最佳答案
any()
生成 True
或 False
,并且生成器表达式变量在表达式之外不可用:
>>> l = ['S', 'R', 'D', 'W', 'V', 'Y', 'H', 'K', 'B', 'M']
>>> s = 'YTG'
>>> any(i in s for i in l)
True
>>> i
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'i' is not defined
使用列表理解列出所有匹配的字母:
matching = [i for i in l if i in s]
if matching:
print matching
保留 l
中的顺序;如果 matching
中的顺序无关紧要,您可以只使用集合交集。我会在此处制作 l
一组:
l = set(['S', 'R', 'D', 'W', 'V', 'Y', 'H', 'K', 'B', 'M']) # Python 3 can use {...}
matching = l.intersection(s)
if matching:
print matching
通过使 l
成为集合,Python 可以迭代较短的 s
字符串。
关于python - 检查字符串中是否存在列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324728/