簡體   English   中英

遍歷列表的列表列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM