将嵌套列表拆分为两个列表[重复]

Posted

技术标签:

【中文标题】将嵌套列表拆分为两个列表[重复]【英文标题】:Splitting a nested list into two lists [duplicate] 【发布时间】:2012-10-20 09:35:26 【问题描述】:

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

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

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

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

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

【问题讨论】:

from the python docs。 zip() in conjunction with the * operator can be used to unzip a list 【参考方案1】:

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

my_list2, my_list1 = zip(*my_list)

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

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

【讨论】:

感谢您的回答,当我不知道*my_list中有多少嵌套列表时我该怎么办? 在这种情况下,可能my_lists = zip(*my_list) 稍后通过 len(my_lists) 你会知道你最终得到了多少个列表。 我发现zip 令人不安的是,即使您的嵌套列表是完全对称的,您最终也可能会得到混乱的数据,因此列表理解可能会稍微好一些,请考虑:ab = [['a', 'A', 0], ['b', 1], ['c', 'C', 2]]; print(list(zip(*ab))); [('a', 'b', 'c'), ('A', 1, 'C')] 【参考方案2】:

您可以使用列表推导。

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

【讨论】:

【参考方案3】:

使用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

【讨论】:

如果每个元组都有三个元素 [(a,b,c) (x,y,z)] 并且我想在一个地方提取 (a,b) (x,y) 并且 ( c,z) 在另一个地方。如何进行请告诉。

以上是关于将嵌套列表拆分为两个列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将列表拆分为两个列表的所有可能性

如何将可迭代拆分为两个具有交替元素的列表

Python-组合两个列表以制作列表列表[重复]

如何在python中将列表拆分为没有重复元素的子集

将列表拆分为 2 个相等和的列表

将列表转换为 DataFrame 并在 DataFrame 列中拆分嵌套字典 - Python 3.6