簡體   English   中英

將3D列表更改為2D列表

[英]changing a 3D list into a 2D list

我想將3D列表(list_1)轉換為2D列表(list_2)。 例如:

list_1: [[[3], [4]], [[5], [6]], [[7], [8]]]
list_2: [[3, 4], [5, 6], [7, 8]]

這是我已經嘗試過的:

[e for sl in lst for e in sl]

但是結果會有所不同:

[[3], [4], [5], [6], [7], [8]]

出於可讀性考慮,我建議使用itertools.chain將此處的內部列表展平:

from itertools import chain
l = [[[3], [4]], [[5], [6]], [[7], [8]]]

[list(chain.from_iterable(i)) for i in l]
# [[3, 4], [5, 6], [7, 8]]

按照您的方法,您需要進行額外的循環以平化內部列表:

[[i for e in sl for i in e] for sl in l]
# [[3, 4], [5, 6], [7, 8]]

另外一個選項:

[reduce(list.__add__, x)  for x in list_1]

您也可以這樣:

l = [[[3], [4]], [[5], [6]], [[7], [8]]]

print ([sum(item, []) for item in l])

輸出:

[[3, 4], [5, 6], [7, 8]]

您接近:

[[c for b in a for c in b] for a in lst]

如果所有嵌套列表都包含單個元素,則可以使用拆包:

d = [[[3], [4]], [[5], [6]], [[7], [8]]]
new_d = [[i for [i] in b] for b in d]

輸出:

[[3, 4], [5, 6], [7, 8]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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