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