2014-11-02 98 views
0

我如何將2個列表連接在一起?將兩個列表合併成一個而不重複

比方說:

list1 = ['hi', 'state', 'California', 'usa'] 
list2 = ['moon', 'sun', 'hi', 'flower'] 

和輸出將加入單詞連在一起,但不包括將包含同一個詞的話的兩倍,如「喜喜」是這樣的:

['hi moon', 'hi sun', ' hi flower', 'state moon', 'state hi', 'state flower'] ...eetc.. 

回答

2

遍歷列表理解中的每個列表。 product是不是真的需要在這種情況下:

>>> list1 = ['hi', 'state', 'California', 'usa'] 
>>> list2 = ['moon', 'sun', 'hi', 'flower'] 
>>> [a+' '+b for a in list1 for b in list2 if a != b] 
['hi moon', 'hi sun', 'hi flower', 'state moon', 'state sun', 'state hi', 'state flower', 'California moon', 'California sun', 'California hi', 'California flower', 'usa moon', 'usa sun', 'usa hi', 'usa flower'] 

這相當於更長的形式:

>>> L = [] 
>>> for a in list1: 
...  for b in list2: 
...   if a != b: 
...    L.append(a+' '+b) 
...    
>>> L 
['hi moon', 'hi sun', 'hi flower', 'state moon', 'state sun', 'state hi', 'state flower', 'California moon', 'California sun', 'California hi', 'California flower', 'usa moon', 'usa sun', 'usa hi', 'usa flower'] 
3

使用itertools.product()和然後過濾出任何相同的對:

from itertools import product 

[' '.join([a, b]) for a, b in product(list1, list2) if a != b] 

演示:

>>> from pprint import pprint 
>>> from itertools import product 
>>> list1 = ['hi', 'state', 'California', 'usa'] 
>>> list2 = ['moon', 'sun', 'hi', 'flower'] 
>>> [' '.join([a, b]) for a, b in product(list1, list2) if a != b] 
['hi moon', 'hi sun', 'hi flower', 'state moon', 'state sun', 'state hi', 'state flower', 'California moon', 'California sun', 'California hi', 'California flower', 'usa moon', 'usa sun', 'usa hi', 'usa flower'] 
>>> pprint(_) 
['hi moon', 
'hi sun', 
'hi flower', 
'state moon', 
'state sun', 
'state hi', 
'state flower', 
'California moon', 
'California sun', 
'California hi', 
'California flower', 
'usa moon', 
'usa sun', 
'usa hi', 
'usa flower'] 
相關問題