我基本上想创建一个新列表'T',如果列表'Z'中的每个元素作为列表'Z'中的单独元素存在,它将匹配。 即我希望在下列情况下'T'的输出为T = ['Hi x']
Word = ['x']
Z = ['Hi xo xo','Hi x','yoyo','yox']
我尝试了下面的代码,但是它给了我所有带有'x'的单词的句子,但是我只希望句子中有'x'作为单独的单词。
for i in Z:
for v in i:
if v in Word:
print (i)
答案 0 :(得分:2)
只是另一种pythonic方式
[phrase for phrase in Z for w in Word if w in phrase.split()]
['Hi x']
答案 1 :(得分:1)
你可以用列表理解来完成它。
>>> [i for i in Z if any (w.lower() ==j.lower() for j in i.split() for w in Word)]
['Hi x']
编辑:
或者你可以这样做:
>>> [i for i in Z for w in Word if w.lower() in map(lambda x:x.lower(),i.split())]
['Hi x']
答案 2 :(得分:0)
words = ['x']
phrases = ['Hi xo xo','Hi x','yoyo','yox']
for phrase in phrases:
for word in words:
if word in phrase.split():
print(phrase)
答案 3 :(得分:0)
如果您要打印Z
中包含来自Word
的单词的所有字符串:
Word = ['xo']
Z = ['Hi xo xo','Hi x','yoyo','yox']
res = []
for i in Z:
for v in i.split():
if v in Word:
res.append(i)
break
print(res)
注意break
。如果没有中断,你可以从Z
获得一些字符串两次,如果两个字匹配的话。与示例中的xo
类似。
i.split()
表达式将i
拆分为空格上的单词。
答案 4 :(得分:0)
如果您将Word
存储为set
而不是list
,则可以使用set
操作进行检查。基本上在将空格上的每个字符串拆分后,用单词构造set
并检查Word
是否是子集。
>>> Z = ['Hi xo xo','Hi x','yoyo','yox']
>>> Word = {'x'}
>>> [s for s in Z if Word <= set(s.split())]
['Hi x']
>>> Word = {'Hi', 'x'}
>>> [s for s in Z if Word <= set(s.split())]
['Hi x']
上述<=
与set.issubset
相同。