ach*_*aud 6 python string list-comprehension list python-3.x
我有两个列表,如下所示。我想找出第一个列表中的字符串是否在第二个列表中的任何字符串中。出于某种原因,当我尝试运行它时,我得到一个空列表。
例如: in list5,字符串'apple'在list6's 'I ate an apple'。
list5 = ['apple', 'mango', 'sherbet']
list6 = ['I ate an apple', 'I ate two apples', 'I love mango']
print ([x for i,x in enumerate(list5) if x in list6])
Run Code Online (Sandbox Code Playgroud)
对于整数列表,完全相同的事情可以顺利运行。是否有不同的方式通过字符串?
list7 = [1, 2, 3, 4, 5]
list8 = [1, 2]
print ([x for i,x in enumerate(list7) if x in list8])
Run Code Online (Sandbox Code Playgroud)
您正在检查是否apple在列表中,但您想检查列表中是否有任何字符串包含苹果
list5 = ['apple', 'mango', 'sherbet']
list6 = ['I ate an apple', 'I ate two apples', 'I love mango']
[x for x in list5 if any(x in item for item in list6)]
#['apple', 'mango']
Run Code Online (Sandbox Code Playgroud)
这将创建一个列表列表,其中包含第二个列表中句子的索引,其中包含第一个列表中的单词
list5 = ['apple', 'mango', 'sherbet']
list6 = ['I ate an apple', 'I ate two apples', 'I love mango', '2 apple', 'big apple', 'big mango']
[[i for i, sentence in enumerate(list6) if x in sentence] for x in list5]
#[[0, 1, 3, 4], [2, 5], []]
Run Code Online (Sandbox Code Playgroud)
正如我在评论中所说,在这种情况下,字典会更好
{x:[i for i,sen in enumerate(list6) if x in sen] for x in list5}
#{'apple': [0, 1, 3, 4], 'mango': [2, 5], 'sherbet': []}
Run Code Online (Sandbox Code Playgroud)
如果只存储完全匹配,您可以使用它,但如果第一个列表不仅包含单词,则list5这不起作用,例如,如果包含“一个苹果”,这不起作用
{x:[i for i,sen in enumerate(list6) if any(x==item for item in sen.split())] for x in list5}
#{'apple': [0, 3, 4], 'mango': [2, 5], 'sherbet': []}
Run Code Online (Sandbox Code Playgroud)