Skip to main content
 首页 » 编程设计

python之如何解压嵌套列表中的元组

2025年05月04日13JustinYoung

我在解包二维元组列表时遇到问题(或者更确切地说,我正在寻找更优雅的解决方案)。

列表如图:

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)。 This question是相似的,但我无法遵循函数式编程。

谢谢!

请您参考如下方法:

我认为你正在寻找这样的东西:

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)] 

生成的元组与示例中的相同,但顺序不同。我不明白你是怎么订购的。如果你能澄清这一点,我可能会修改示例。

希望这对您有所帮助。