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

标签 python

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

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() 生成 TrueFalse,并且生成器表达式变量在表达式之外不可用:

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

相关文章:

python - 使用 Pandas 计算并绘制计数比率

python - 使用 matplotlib 绘制点数图

python - 无法使用基于 python 的库 ftplib 连接到本地 FTP 服务器

python - Windows 10 版 Geopandas 安装

python - 扩展 Python 队列的正确方法?

python - PyOpenGL - 最小的 glDrawArrays 示例

java - 有趣的 Java 正则表达式限制

python - 将 NumPy float 组解码为不同长度的数据 block ?

python - .lower() 和正则表达式在同一行?

python - 双 for 循环到 Python 列表理解