检查字符串中是否存在列表元素

2024-05-18 20:36:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查字符串是否包含列表中的元素:

l = ['S', 'R', 'D', 'W', 'V', 'Y', 'H', 'K', 'B', 'M']

s = 'YTG'

第一个解决方案是:

^{pr2}$

不过,这似乎效率低下。我尝试了以下代码,但它给出了列表的最后一个元素'M',而不是'Y'

if any(i in s for i in l):
    print i

我想知道这里有什么问题吗?在

谢谢!在


Tags: 字符串代码in元素列表forifany
3条回答

any将告诉您条件是True还是{},而不提供更多详细信息。在

要计算实际的常用字母,只需创建一个set并执行交集:

l = ['S', 'R', 'D', 'W', 'V', 'Y', 'H', 'K', 'B', 'M']

s = set('YTG')
print(s.intersection(l))

产生{'Y'}。在

一个衬垫:

set(list(s)).intersection(set(l))

{'Y'}

根据@Martijn Pieters♦ 简单评论:

set(s).intersection(l)会做到这一点,如@Jean fraçois Fabre的回答所示

any()产生True或{},并且生成器表达式变量在表达式之外不可用:

>>> 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

使用列表理解列出所有匹配的字母:

^{pr2}$

这将保留l中的顺序;如果matching中的顺序无关紧要,则可以使用设置交集。我会在这里做一套:

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字符串。在

相关问题 更多 >

    热门问题