如何检查列表的元素是否包含另一个列表的元素之一

how to check if element of list contains one of the elements of another list

提问人:Nikko Cleri 提问时间:9/19/2023 更新时间:9/19/2023 访问量:38

问:

我有一个字符串列表,我需要返回一个列表,其中包含此列表中的元素,其中包含 中的任何字符串。我已经尝试了以下列表推导['asdf', 'qwer', 'zxcv']['a', 'g', 'y']

lst = ['asdf', 'qwer', 'zxcv']
target_strings = ['a', 'g', 'y']
[element for element in lst if any(target_strings) in element]

这不起作用,就像 一样 ,不是 .在本例中,目标输出为 。any(target_strings)boolstring['asdf']

python 字符串 列表 列表推导

评论

0赞 cards 9/19/2023
使用嵌套循环

答:

2赞 Tim Roberts 9/19/2023 #1

你很接近。

>>> [e for e in lst if any(t in e for t in target_strings)]
['asdf']
>>> 
4赞 Barmar 9/19/2023 #2

参数 to 应该是一系列条件。如果任何条件为真,则返回 true。any()

你给它一个字符串序列。当字符串用作条件时,如果它不是空的,则为 true。因此,您只是在测试是否有任何一个不是空的,这始终是正确的。target_strings

将测试放在参数中。inany()

[element for element in lst if any(s in element for s in target_strings)]
0赞 Timeless 9/19/2023 #3

除了 @Barmar@Tim Roberts 的答案之外,为了给出另一种方法,您可以通过在元素列表和目标之间进行集来使用集合运算:

[e for e in lst if set(e).intersection(target_strings)] # which gives ['asdf']