查找其他列表项中列表项的列表索引

And*_*rew 3 python list-comprehension python-3.x

我有一个长字符串列表,我想得到列表元素的索引与另一个列表中的字符串的子字符串匹配.检查是否列表项包含AA单字符串列表里面是很容易做到与列表理解,像这样的问题:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
thing_to_find = "abc"
matching = [i for i, x in enumerate(my_list) if thing_to_find in x]
Run Code Online (Sandbox Code Playgroud)

但是,我不仅要检查是否"abc"x,但是如果列表中有另一个列表中的任何字符串,如下所示:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
things_to_find = ['abc', 'def']
Run Code Online (Sandbox Code Playgroud)

这显然不起作用(但如果它真的很酷):

matching = [i for i, x in enumerate(my_list) if things_to_find in x]
Run Code Online (Sandbox Code Playgroud)

如果我单独运行命令,我可以找到列表索引,但它很乏味和可怕:

print([i for i, x in enumerate(my_list) if 'abc' in x])
# [0, 3]
print([i for i, x in enumerate(my_list) if 'def' in x])
# [1]
Run Code Online (Sandbox Code Playgroud)

找到一个列表中的元素在另一个列表中找到的所有实例的索引的最佳方法是什么?

Mar*_*ers 5

您正在寻找any()这里的功能:

matching = [i for i, x in enumerate(my_list) if any(thing in x for thing in things_to_find)]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> things_to_find = ['abc', 'def']
>>> [i for i, x in enumerate(my_list) if any(thing in x for thing in things_to_find)]
[0, 1, 3]
Run Code Online (Sandbox Code Playgroud)