遍历列表的列表列表

Iterating through list of lists of lists

我正在尝试遍历 python 中的 3-D 列表(不是 numpy,但如果这样更容易,我愿意转换为 numpy 数组),这样的列表如下这个:

a = [[[0, 0], [3, 0]], [[1, 0], [4, 0]], [[2, 0], [6, 0]] ]

我可以得到输出

[0,0]
[1,0]
[2,0]
[3,0]
[4,0]
[6,0]

我不知道如何让它像这样迭代...

我的代码:

a = [[[0, 0], [0, 0]], [[1, 0], [0, 0]], [[2, 0], [0, 0]] ]
for i in range(len(a)):
    for z in range(len(a[i])):
        print(a[i][z])

我尝试了不同的方法,但似乎无法获得此输出。

这是正确的迭代方式,就像您尝试做的那样:

a = [[[0, 0], [0, 0]], [[1, 0], [0, 0]], [[2, 0], [0, 0]] ]
for i in range(len(a)):
    for z in range(len(a[i])):
        print((a[i])[z])

如果这对您来说更简单,请尝试迭代列表的元素,而不是使用索引迭代列表的长度:

a = [[[0, 0], [0, 0]], [[1, 0], [0, 0]], [[2, 0], [0, 0]] ]
for a1 in a:
    for a2 in a1:
        print(a2)

如果你只想按列遍历元素,你可以将列表转换为 numpy 数组,然后堆叠列并打印:

import numpy as np
a = [[[0, 0], [3, 0]], [[1, 0], [4, 0]], [[2, 0], [6, 0]] ]
arr = np.stack(np.array(a), axis=1)

for p in arr:
    for x in p:
        print(x)

下面的解决方案是基于先前的假设,即根据排序顺序打印子列表中的每个项目: 您可以使用 itertools 将 3d 列表展平为 2d 列表,然后根据每个子列表中的第一个元素对 2d 列表进行排序。然后打印排序后的列表。

import itertools
a = [[[0, 0], [3, 0]],[[1, 0], [4, 0]],[[2, 0], [6, 0]]]
flat_list = list(itertools.chain(*a))
sorted_list = sorted(flat_list, key=lambda x: x[0])

for i in sorted_list:
    print(i)

我认为您想从每个子列表中连续打印第 n 个 sub-sublists。您可以解压并压缩 a 以获得可迭代的元组,然后打印其中的每一对:

for tpl in zip(*a):
    for pair in tpl:
        print(pair)
        

输出:

[0, 0]
[1, 0]
[2, 0]
[3, 0]
[4, 0]
[6, 0]

尝试:

print(*[i for v in zip(*a) for i in v], sep="\n")

打印:

[0, 0]
[1, 0]
[2, 0]
[3, 0]
[4, 0]
[6, 0]