我有这个清单:
dc = ["hello", "world"]
另一个:
lines = ["This is", "an example of hello", "line in the world of strings", "Testing"]
我希望在dc上找到那些属于行的任何元素的元素......
我可以将行循环为:
for line in lines:
# what to do here?
但是我不知道如何确切地找到dc中的“hello”元素可以在“hello的例子”中找到,或者在“世界上的行”中找到dc中的“world”字符串“在行...
也许我不应该循环线?
答案 0 :(得分:6)
>>> dc = ["hello", "world", "foo"]
>>> lines = ["This is", "an example of hello", "line in the world of strings", "Testing"]
>>> [word for word in dc if any(word in line for line in lines)]
['hello', 'world']
答案 1 :(得分:1)
set
功能的单线程解决方案首先从你拥有的行中获取所有单词。将它们作为一组来节省空间并获得一些有用的功能(见后文)。然后在上面使用&
操作,并根据您要查找的单词创建设置。解决方案可以是一行:
>>> set(dc) & set(sum(map(str.split, lines), []))
set(['world', 'hello'])
如果您希望将结果作为列表,只需将其转换为列表:
>>> list(set(dc) & set(sum(map(str.split, lines), [])))
['world', 'hello']