2014-11-02 97 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'] 
相关问题