2015-09-01 244 views
3
list1=['water', 'analog', 'resistance', 'color', 'strap','men', 'stainless', 'timepiece','brown','fast'] 

list2=['water resistant','water','red strap','digital and analog','analog', 'men', 'stainless steel'] 

,則輸出是如何從字符串列表中刪除單詞列表?

list=['water resistant','red strap','digital and analog','stainless steel'] 
+0

並且您還想刪除** ** – The6thSense

+1

您只想刪除整個匹配項?你有沒有嘗試過這樣做? –

+2

[從2列表中獲取差異。 Python](http://stackoverflow.com/questions/5305164/get-difference-from-2-lists-python) –

回答

4

您可以使用組操作:

list(set(list2) - set(list1)) 

可能的結果:

['red strap', 'digital and analog', 'stainless steel', 'water resistant'] 

如果你想保留你可以做的順序如下:

s = set(list1) 

[x for x in list2 if x not in s] 

結果:

['water resistant', 'red strap', 'digital and analog', 'stainless steel'] 
+0

的問題根據我的觀點,他也想刪除'**' – The6thSense

+2

@VigneshKalai這是一個格式問題。我確定OP在他的代碼中沒有任何明星。 – JuniorCompressor

1

您可以使用set這一點。此外set您不會有任何重複的項目。

下面是從Python Shell中

>>> set1 = set(list1) 
>>> set2 = set(list2) 
>>> set1 
set(['brown', 'timepiece', 'color', 'stainless', 'men', 'resistance', 'fast', 'strap', 'water', 'analog']) 
>>> set1-set2 
set(['brown', 'timepiece', 'color', 'stainless', 'resistance', 'fast', 'strap']) 
>>> set2-set1 
set(['red strap', '**water resistant**', '**stainless steel**', '**digital and analog**']) 
>>> for each in (set2-set1): 
     print each 

red strap 
**water resistant** 
**stainless steel** 
**digital and analog** 
>>> list3 = list(set2-set1) 
>>> list3 
['red strap', '**water resistant**', '**stainless steel**', '**digital and analog**'] 
1

輸出如果你想

  1. List2項目
  2. 元素不list1

嘗試刪除*

>>> list = [x.replace('*', '') for x in list2 if x not in list1] 
>>> list 
['water resistant', 'red strap', 'digital and analog', 'stainless steel'] 
>>> 
0

你可以這樣做。迭代列表1中列表1的單詞列表,然後使用迭代器刪除單詞。這對重複的單詞不起作用。

>>> for s in [a for a in list1[:] if a in list2[:]]: 
... list2.remove(s) 
... 
>>> list2 
['water resistant', 'red strap', 'digital and analog', 'stainless steel'] 
+0

儘管此代碼可能會回答問題,但提供有關如何解決問題和/或爲何解決問題的其他上下文可以提高答案的長期價值。 –

+0

什麼可以使這兩行代碼更清晰?也許可以說這是一個「列表理解」,這樣一個不識別語法的人可以查看它?但是我第一次看到一個我的想法是「很棒的」,並且在玩了一下之後,「做它在罐子上說的」。 – nigel222