匹配字符串列表中的字符串

时间:2016-12-07 05:46:34

标签: python string list

我基本上想创建一个新列表'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)

5 个答案:

答案 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相同。