Py学习  »  Python

在Python中遍历列表列表列表

devman3211 • 3 年前 • 1426 次点击  

我正在尝试用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])

我尝试过不同的方法,但似乎无法得到这个输出。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132007
 
1426 次点击  
文章 [ 4 ]  |  最新文章 3 年前
lemon
Reply   •   1 楼
lemon    3 年前

这是一种正确的迭代方式,就像你正在尝试的那样:

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)
Rishabh Mishra
Reply   •   2 楼
Rishabh Mishra    3 年前

如果只想按列遍历元素,可以将列表转换为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将三维列表展平为二维列表,然后根据每个子列表中的第一个元素对二维列表进行排序。然后打印排序后的列表。

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)
Andrej Kesely
Reply   •   3 楼
Andrej Kesely    3 年前

尝试:

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]
enke
Reply   •   4 楼
enke    3 年前

我认为您需要从每个子列表中连续打印第n个子列表。你可以打开行李拉上拉链 a 要获得元组的iterable,请打印其中的每一对:

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

输出:

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