[英]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.