Python 如何在嵌套列表中解包元组?

Python 如何在嵌套列表中解包元组?,python,list,tuples,Python,List,Tuples,我在打开二维元组列表时遇到了麻烦(或者更确切地说,我正在寻找一个更优雅的解决方案) 列表如下所示: a = [ [(2, 3, 5), (3, 4, 6), (4, 5, 7), (1, 1, 1), (1, 2, 3)], [(4, 9, 2), (8, 8, 0), (3, 5, 1), (2, 6, 8), (2, 4, 8)], [(8, 7, 5), (2, 5, 1), (9, 2, 2), (4, 5, 1), (0, 1, 9)], ...] 我想将元组

我在打开二维元组列表时遇到了麻烦(或者更确切地说,我正在寻找一个更优雅的解决方案)

列表如下所示:

a = [ [(2, 3, 5), (3, 4, 6), (4, 5, 7), (1, 1, 1), (1, 2, 3)],
      [(4, 9, 2), (8, 8, 0), (3, 5, 1), (2, 6, 8), (2, 4, 8)],
      [(8, 7, 5), (2, 5, 1), (9, 2, 2), (4, 5, 1), (0, 1, 9)], ...]
我想将元组解包以获得3个相同形式的嵌套列表,即:

a_r = [ [2, 3, 4, 1, 1] , [4, 8, 3, 2, 2] , [8, 2, 9, 4, 0] , ...]
a_g = [ [3, 4, 5, 1, 2] , [9, 8, 5, 6, 4] , [7, 5, 2, 5, 1] , ...]
等等。这是我的密码:

a_r = []
a_g = []
a_b = []

for i in xrange(len(a)):
    r0=[]
    g0=[]
    b0=[]
    for j in range(5):
        r0.append(a[i][j][0])
        g0.append(a[i][j][1])
        b0.append(a[i][j][2])
    a_r.append(r0)
    a_g.append(g0)
    a_b.append(b0)
我确信有更有效的方法可以做到这一点(我刚刚开始学习Python)。类似,但我无法遵循函数式编程


谢谢

我想你在追求这样的东西:

a = [ [(2, 3, 5), (3, 4, 6), (4, 5, 7), (1, 1, 1), (1, 2, 3)],
      [(4, 9, 2), (8, 8, 0), (3, 5, 1), (2, 6, 8), (2, 4, 8)],
      [(8, 7, 5), (2, 5, 1), (9, 2, 2), (4, 5, 1), (0, 1, 9)]]

for row in a:
    print(list(zip(*row)))
其中:

[(2, 3, 4, 1, 1), (3, 4, 5, 1, 2), (5, 6, 7, 1, 3)]
[(4, 8, 3, 2, 2), (9, 8, 5, 6, 4), (2, 0, 1, 8, 8)]
[(8, 2, 9, 4, 0), (7, 5, 2, 5, 1), (5, 1, 2, 1, 9)]
结果元组与示例中相同,但顺序不同。我不明白你是怎么点的。如果你能澄清这一点,我可能会修改这个例子


希望这能有所帮助。

我想你想要的是这样的东西:

a = [ [(2, 3, 5), (3, 4, 6), (4, 5, 7), (1, 1, 1), (1, 2, 3)],
      [(4, 9, 2), (8, 8, 0), (3, 5, 1), (2, 6, 8), (2, 4, 8)],
      [(8, 7, 5), (2, 5, 1), (9, 2, 2), (4, 5, 1), (0, 1, 9)]]

for row in a:
    print(list(zip(*row)))
其中:

[(2, 3, 4, 1, 1), (3, 4, 5, 1, 2), (5, 6, 7, 1, 3)]
[(4, 8, 3, 2, 2), (9, 8, 5, 6, 4), (2, 0, 1, 8, 8)]
[(8, 2, 9, 4, 0), (7, 5, 2, 5, 1), (5, 1, 2, 1, 9)]
结果元组与示例中相同,但顺序不同。我不明白你是怎么点的。如果你能澄清这一点,我可能会修改这个例子

希望这能有所帮助。

元组是不可变的(这意味着您无法更改它们),因此您必须遍历每个元素才能提取它们。这就是您链接到的函数式编程示例所做的,以一种非常通俗的列表理解方式

为了帮助您自助,正如shirdharama所说,再次看一看示例,了解fmap_lol真正的意思是“函数映射-列表列表”,fmap_列表的意思是“函数映射-列表”,fmap_el的意思是“函数映射-元素”。所以split_nt调用fmap_lol,它将您的输入拆分成一个列表(元组),调用fmap_list,它获取每个列表并调用fmap_el,它将元素返回到链的后面

该示例只是一种遍历元组以提取每个元素并将它们放在所需位置的方法。它的功能性是因为它们是函数调用,而不是一行后来被遗忘的gobbligook

如果您不熟悉列表理解、lamda(或匿名函数)或示例中的任何其他内容,我建议您花一些时间阅读python文档并查找每个文档。

元组是不可变的(意味着您无法更改它们),因此您必须遍历每个元素以提取它们。这就是您链接到的函数式编程示例所做的,以一种非常通俗的列表理解方式

>>> a = [ [(2, 3, 5), (3, 4, 6), (4, 5, 7), (1, 1, 1), (1, 2, 3)],
...       [(4, 9, 2), (8, 8, 0), (3, 5, 1), (2, 6, 8), (2, 4, 8)],
...       [(8, 7, 5), (2, 5, 1), (9, 2, 2), (4, 5, 1), (0, 1, 9)]]
>>> zip(*(zip(*x) for x in a))
[((2, 3, 4, 1, 1), (4, 8, 3, 2, 2), (8, 2, 9, 4, 0)), ((3, 4, 5, 1, 2), (9, 8, 5, 6, 4), (7, 5, 2, 5, 1)), ((5, 6, 7, 1, 3), (2, 0, 1, 8, 8), (5, 1, 2, 1, 9))]

>>> for row in _:
...     print row
... 
((2, 3, 4, 1, 1), (4, 8, 3, 2, 2), (8, 2, 9, 4, 0))
((3, 4, 5, 1, 2), (9, 8, 5, 6, 4), (7, 5, 2, 5, 1))
((5, 6, 7, 1, 3), (2, 0, 1, 8, 8), (5, 1, 2, 1, 9))
为了帮助您自助,正如shirdharama所说,再次看一看示例,了解fmap_lol真正的意思是“函数映射-列表列表”,fmap_列表的意思是“函数映射-列表”,fmap_el的意思是“函数映射-元素”。所以split_nt调用fmap_lol,它将您的输入拆分成一个列表(元组),调用fmap_list,它获取每个列表并调用fmap_el,它将元素返回到链的后面

该示例只是一种遍历元组以提取每个元素并将它们放在所需位置的方法。它的功能性是因为它们是函数调用,而不是一行后来被遗忘的gobbligook

如果您不熟悉列表理解、lamda(或匿名函数)或示例中的任何其他内容,我建议您花些时间阅读python文档,并逐一查找

>>> a = [ [(2, 3, 5), (3, 4, 6), (4, 5, 7), (1, 1, 1), (1, 2, 3)],
...       [(4, 9, 2), (8, 8, 0), (3, 5, 1), (2, 6, 8), (2, 4, 8)],
...       [(8, 7, 5), (2, 5, 1), (9, 2, 2), (4, 5, 1), (0, 1, 9)]]
>>> zip(*(zip(*x) for x in a))
[((2, 3, 4, 1, 1), (4, 8, 3, 2, 2), (8, 2, 9, 4, 0)), ((3, 4, 5, 1, 2), (9, 8, 5, 6, 4), (7, 5, 2, 5, 1)), ((5, 6, 7, 1, 3), (2, 0, 1, 8, 8), (5, 1, 2, 1, 9))]

>>> for row in _:
...     print row
... 
((2, 3, 4, 1, 1), (4, 8, 3, 2, 2), (8, 2, 9, 4, 0))
((3, 4, 5, 1, 2), (9, 8, 5, 6, 4), (7, 5, 2, 5, 1))
((5, 6, 7, 1, 3), (2, 0, 1, 8, 8), (5, 1, 2, 1, 9))
如果必须的话

>>> map(list, zip(*(map(list, zip(*x)) for x in a)))
[[[2, 3, 4, 1, 1], [4, 8, 3, 2, 2], [8, 2, 9, 4, 0]], [[3, 4, 5, 1, 2], [9, 8, 5, 6, 4], [7, 5, 2, 5, 1]], [[5, 6, 7, 1, 3], [2, 0, 1, 8, 8], [5, 1, 2, 1, 9]]]
>>> for row in _:
...     print row
... 
[[2, 3, 4, 1, 1], [4, 8, 3, 2, 2], [8, 2, 9, 4, 0]]
[[3, 4, 5, 1, 2], [9, 8, 5, 6, 4], [7, 5, 2, 5, 1]]
[[5, 6, 7, 1, 3], [2, 0, 1, 8, 8], [5, 1, 2, 1, 9]]
如果必须的话

>>> map(list, zip(*(map(list, zip(*x)) for x in a)))
[[[2, 3, 4, 1, 1], [4, 8, 3, 2, 2], [8, 2, 9, 4, 0]], [[3, 4, 5, 1, 2], [9, 8, 5, 6, 4], [7, 5, 2, 5, 1]], [[5, 6, 7, 1, 3], [2, 0, 1, 8, 8], [5, 1, 2, 1, 9]]]
>>> for row in _:
...     print row
... 
[[2, 3, 4, 1, 1], [4, 8, 3, 2, 2], [8, 2, 9, 4, 0]]
[[3, 4, 5, 1, 2], [9, 8, 5, 6, 4], [7, 5, 2, 5, 1]]
[[5, 6, 7, 1, 3], [2, 0, 1, 8, 8], [5, 1, 2, 1, 9]]

到目前为止你试过什么吗?不明白你是如何连接/解包元组的?你能澄清一下吗?你到底面临什么困难?你取得了多少进步?尽量做到具体。Stackoverflow的目的是帮助您自助,而不是填鸭式地喂饱您:)如果关键是要有一个结构化的“矩形”多维数字数组,并且您基本上想要“重新排列轴”,那么您可能需要查看Numpy。您到目前为止尝试过什么吗?不明白您是如何连接/解包元组的?你能澄清一下吗?你到底面临什么困难?你取得了多少进步?尽量做到具体。Stackoverflow的目的是帮助您自助,而不是填鸭式地喂饱您:)如果关键是要有一个结构化的“矩形”多维数字数组,并且您基本上想要“重新排列轴”,那么您可能需要查看Numpy。很好!
*
zip(*行)
中的角色是什么?Thx。你可以找到更多关于这个的信息。很好!
*
zip(*行)
中的角色是什么?Thx。更多关于这个你可以找到。