簡體   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