我有一个名为names
的字符串列表,我需要使用names
列表中的每个元素搜索pattern
列表中的每个元素。找到了几个可以循环访问单个字符串但不是字符串列表的指南
a = [x for x in names if 'st' in x]
提前谢谢!
names = ['chris', 'christopher', 'bob', 'bobby', 'kristina']
pattern = ['st', 'bb']
期望的输出:
a = ['christopher', 'bobby', 'kristina]
答案 0 :(得分:8)
将any()功能与generator expression:
一起使用a = [x for x in names if any(pat in x for pat in pattern)]
any()
是一个短路函数,因此第一次遇到匹配的模式时,它返回True。由于我使用的是生成器表达式而不是列表推导,因此甚至不会检查匹配的第一个模式之后的模式。这意味着这只是最快的方式。
答案 1 :(得分: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