2014-02-10 3 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 возвращает почтовый объект (который является 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

Использование почтового индекса:

>>> 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)] 
Смежные вопросы