2014-02-10 78 views
6

假设我有两个列表:如何将两个列表合并到python中的一列列中?

t1 = ["abc","def","ghi"] 
t2 = [1,2,3] 

我如何可以合并使用它蟒蛇,使输出列表将是:

t = [("abc",1),("def",2),("ghi",3)] 

,我已经尝试过的程序是:

t1 = ["abc","def"] 
t2 = [1,2]   
t = [ ] 
for a in t1: 
     for b in t2: 
       t.append((a,b)) 
print t 

输出是:

[('abc', 1), ('abc', 2), ('def', 1), ('def', 2)] 

我不想重复条目。

+2

''[...]'是一个列表,'(...)'是一个元组。 – Christian

+0

对不起基督徒,并感谢您的更正 – Madhusudan

回答

10

在Python 2.x中,你可以使用zip

>>> t1 = ["abc","def","ghi"] 
>>> t2 = [1,2,3] 
>>> zip(t1, t2) 
[('abc', 1), ('def', 2), ('ghi', 3)] 
>>> 

然而,在Python 3.x中,zip返回一个zip对象(这是一个iterator),而不是一个列表。这意味着,你必须明确地将它们放在list结果转换成一个列表:

>>> t1 = ["abc","def","ghi"] 
>>> t2 = [1,2,3] 
>>> zip(t1, t2) 
<zip object at 0x020C7DF0> 
>>> list(zip(t1, t2)) 
[('abc', 1), ('def', 2), ('ghi', 3)] 
>>> 
+0

可能是错的,但我认为你第一次阅读正确。我认为压缩列表是OP需要的,你写的是OP的尝试产生的内容,但OP“[不需要重复输入”。 – DSM

+0

@DSM - 就是这样。我需要另一杯咖啡...... – iCodez

5

使用ZIP:

>>> t1 = ["abc","def","ghi"] 
>>> t2 = [1,2,3] 
>>> list(zip(t1,t2)) 
[('abc', 1), ('def', 2), ('ghi', 3)] 
# Python 2 you do not need 'list' around 'zip' 

如果你不想重复的项目,你不在乎有关订单,用一套:

>>> l1 = ["abc","def","ghi","abc","def","ghi"] 
>>> l2 = [1,2,3,1,2,3] 
>>> set(zip(l1,l2)) 
set([('def', 2), ('abc', 1), ('ghi', 3)]) 

如果你想以uniquify:

>>> seen=set() 
>>> [(x, y) for x,y in zip(l1,l2) if x not in seen and (seen.add(x) or True)] 
[('abc', 1), ('def', 2), ('ghi', 3)] 
相关问题