搜索与另一个字符串元素列表匹配的字符串元素列表

9

我有一个字符串列表叫做names,我需要搜索names列表中的每个元素与pattern列表中的每个元素进行匹配。找到了一些可以循环单个字符串的指南,但是没有针对字符串列表的指南。

a = [x for x in names if 'st' in x]

Thank you in advance!

names = ['chris', 'christopher', 'bob', 'bobby', 'kristina']
pattern = ['st', 'bb']

期望输出:

a = ['christopher', 'bobby', 'kristina]
2个回答

8
使用any()函数和生成器表达式一起使用:
a = [x for x in names if any(pat in x for pat in pattern)]

any() 是一个短路函数,一旦发现一个符合条件的模式就会返回 True。由于我使用了生成器表达式而不是列表推导式,因此在第一个匹配模式之后的所有模式甚至都不会被检查。这意味着这是最快的实现方式。


2
您可以这样做:
[name for name in names if any([p in name for p in pattern])]

这段代码很容易理解,大声朗读一下即可;我们正在创建一个包含所有名称中有这些模式之一的列表。

使用两个循环:

for name in names:
    for pattern in patterns:
        if pattern in name:
            # append to result

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接