[英]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]] ]
我可以得到 output
[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])
我嘗試了不同的方法,但似乎無法得到這個 output。
我想你想從每個子列表中連續打印第 n 個子列表。 您可以解壓 zip a
以獲得可迭代的元組,然后打印其中的每一對:
for tpl in zip(*a):
for pair in tpl:
print(pair)
Output:
[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]
如果你只想按列遍歷元素,你可以將列表轉換為 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 展平為二維列表,然后根據每個子列表中的第一個元素對二維列表進行排序。 然后打印排序列表。
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)
這是正確的迭代方式,就像您嘗試做的那樣:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.