繁体   English   中英

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

[英]Matching String in a List of Strings

我基本上想创建一个新的列表“ T”,如果列表“ Word”中的每个元素作为单独的元素存在于列表“ 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)

只是另一种pythonic方式

[phrase for phrase in Z for w in Word if w in phrase.split()]
['Hi x']

您可以通过列表理解来做到这一点。

>>> [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']
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)

如果要打印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拆分为空格上的单词。

如果您将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相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM