遍历列表的列表列表
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]
我正在尝试遍历 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]