如何在Python3中解压缩嵌套列表?

时间:2018-07-28 12:54:03

标签: python list iterable-unpacking

Lst = [[1,2,3],[201,202,203],[3,1,4],[591,2019,3.14]]

我需要的是-

a1,b1,c1 = (1,2,3)

a2,b2,c2 = (201,202,203)

以此类推...

4 个答案:

答案 0 :(得分:3)

您希望将值映射到坐标。好吧,您可以直接通过L[outer_list_idx][inner_list_idx]进行几个列表操作即可访问。

对于非数字索引,请使用dict

您可以将字典用于可变数量的变量。这样就无需显式定义大量变量。

使用字母的明显限制是最多允许26个列表。如果这是您想要的,则无需显式定义字母,请使用string.ascii_lowercase

from string import ascii_lowercase

L = [[1,2,3],[201,202,203],[3,1,4],[591,2019,3.14]]

m, n = len(L), len(L[0])

d = {(ascii_lowercase[j], i+1): L[i][j] for i in range(m) for j in range(n)}

print(d)

{('a', 1): 1, ('b', 1): 2, ('c', 1): 3,
 ('a', 2): 201, ('b', 2): 202, ('c', 2): 203,
 ('a', 3): 3, ('b', 3): 1, ('c', 3): 4,
 ('a', 4): 591, ('b', 4): 2019, ('c', 4): 3.14}

然后通过元组键访问。因此,要从第3个列表中检索第2个值,可以使用d[('b', 3)]

答案 1 :(得分:0)

您可以为此use itertools.chain.from_iterable()

t = [[1,2,3],[201,202,203],[3,1,4],[591,2019,3.14]]

from itertools import chain 
a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4 = chain.from_iterable(t) # flattens the list of lists

print(a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4)

输出:

 1 2 3 201 202 203 3 1 4 591 2019 3.14

您需要事先了解列表的尺寸和变量名。我可能只会使用原始列表...

答案 2 :(得分:0)

您只需要这些值吗?然后这样:

Lst = [[1,2,3],[201,202,203],[3,1,4],[591,2019,3.14]]

for k in Lst:

    a, b, c = k
    print(a, b, c)

答案 3 :(得分:0)

该示例可以通过简单的元组拆解来解决。您可以使用zip来配对值:

lst = [[1,2,3],[201,202,203],[3,1,4],[591,2019,3.14]]

((a1, b1, c1), (a2, b2, c2)), _ = zip(lst[::2], lst[1::2])
print(a1, b1, c1)
print(a2, b2, c2)

这将打印:

1 2 3
201 202 203

如果需要下一个值,可以执行以下操作:

_, ((a1, b1, c1), (a2, b2, c2)) = zip(lst[::2], lst[1::2])
print(a1, b1, c1)
print(a2, b2, c2)

输出:

3 1 4
591 2019 3.14