2016-12-07 86 views
0

我基本上想創建一個新的列表'T',如果列表'Word'中的每個元素作爲列表'Z'中的單獨元素存在,就會匹配該列表。 即我想「T」的在以下的情況下,輸出爲T = [「您好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) 
+0

問題是什麼? – wwii

+1

你想要什麼輸出? – Harsha

+0

https://docs.python.org/3/library/stdtypes.html#str.split – wwii

回答

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) 
+0

「Word」是OP問題中的一個列表,而不是單個字符串。 –

+0

謝謝你指出。 –

+0

現在,如果'words'包含'xo',你將打印'Hi xo xo'兩次。查看我的解決方案:) –

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分割爲空格上的單詞。

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'] 
+0

嗨,你還可以編輯此代碼,使它適用於小寫單詞'Word'和'Z',即我不想區分b/w'工作'和'工作'。 –

+0

我收到一個錯誤'lower is not defined'。 –

+0

@InheritedGeek,對不起,有一個錯字,請參閱最新的答案。 –

2

又一個Python的方式

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

這看起來更好,希望OP得到這個。 – ABcDexter

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