将嵌套列表拆分为两个列表

时间:2012-10-30 23:52:19

标签: python list split nested

我有一个这样的嵌套列表:

    my_list = [[1320120000000, 48596281], [1320206400000, 48596281], [1320292800000, 50447908]]

我想把它分成这样的东西:

    my_list1 = [48596281, 48596281, 50447908] 
    my_list2 = [1320120000000, 1320206400000, 1320292800000]    

我知道这很简单,但我无法让它发挥作用。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:23)

这就是内置函数zip的用途。

my_list2, my_list1 = zip(*my_list)

如果你想要列表而不是元组,你可以做

my_list2, my_list1 = map(list, zip(*my_list))

答案 1 :(得分:7)

您可以使用列表理解。

my_list1 = [i[1] for i in my_list]
my_list2 = [i[0] for i in my_list]

答案 2 :(得分:4)

使用list comprehension

In [6]: lis1,lis2=[x[0] for x in my_list],[x[1] for x in my_list]
In [7]: lis1
Out[7]: [1320120000000L, 1320206400000L, 1320292800000L]

In [8]: lis2
Out[8]: [48596281, 48596281, 50447908]

或使用operator.itemgetter()

In [19]: lis1,lis2=map(itemgetter(0),my_list) , map(itemgetter(1),my_list)

In [20]: lis1
Out[20]: [1320120000000L, 1320206400000L, 1320292800000L]

In [21]: lis2
Out[21]: [48596281, 48596281, 50447908]

timeit比较:

In [42]: %timeit lis1,lis2=[x[0] for x in my_list],[x[1] for x in my_list]  #winner if lists are required
100000 loops, best of 3: 1.72 us per loop

In [43]: %timeit my_list2, my_list1 = zip(*my_list) # winner if you want tuples
1000000 loops, best of 3: 1.62 us per loop

In [44]: %timeit my_list2, my_list1 = map(list, zip(*my_list))
100000 loops, best of 3: 4.58 us per loop

In [45]: %timeit lis1,lis2=map(itemgetter(0),my_list),map(itemgetter(1),my_list)
100000 loops, best of 3: 4.4 us per loop