如何将2元组列表拆分为两个列表?

时间:2014-02-18 22:56:39

标签: python list

我有许多2元组的列表。 我想将列表拆分为两个列表,一个列表包含列表中所有元组的第一个元素,另一个列表包含所有元组的第二个元素。我想知道如何有效地做到这一点?谢谢!

例如,我有一个列表y

>>> y = [('ab',1), ('cd', 2), ('ef', 3) ]
>>> type(y)
<type 'list'>

我希望获得两个列表['ab', 'cd', 'ef'][1, 2, 3]

6 个答案:

答案 0 :(得分:28)

a,b = zip(*y)

就是你所需要的......

或者如果你需要它们作为列表而不是元组

a,b = map(list,zip(*y))

答案 1 :(得分:6)

使用ziplist comprehension

>>> y = [('ab', 1), ('cd', 2), ('ef', 3)]
>>> a,b = [list(c) for c in zip(*y)]
>>> a
['ab', 'cd', 'ef']
>>> b
[1, 2, 3]
>>>

答案 2 :(得分:5)

带有*参数解包的

zip将为您提供元组:

>>> a, b = zip(*y)
>>> a
('ab', 'cd', 'ef')
>>> b
(1, 2, 3)

如果您需要列表,可以使用map

>>> a, b = map(list, zip(*y))
>>> a
['ab', 'cd', 'ef']
>>> b
[1, 2, 3]

答案 3 :(得分:0)

试试这个:

def get_list(tuples):
    list1 = []
    list2 = []
    for i in tuples:
        list1.append(i[0])
        list2.append(i[1])
    return list1, list2
y = [('ab',1), ('cd', 2), ('ef', 3) ]
letters, numbers = get_list(y)

答案 4 :(得分:0)

一种方法是首先将列表转换为临时字典,然后分配键和键。临时字典的值分为两个列表

y = [('ab', 1), ('cd', 2), ('ef', 3)]
temp_d = dict(y)
list1 = temp_d.keys()
list2 = temp_d.values()

print list1
print list2

答案 5 :(得分:0)

l1 = []
l2 = []
for i in y:
    l1.append(i[0])
    l2.append(i[1])

L1     ['ab','cd','ef'] L2     [1,2,3]

将每个值附加到另一个