簡體   English   中英

從 python 中的表列表中提取列

[英]Extract columns from list of tables in python

我有一個表格列表,其中每個表格都是一個列表列表。 我想從每個表中提取列以獲取列列表。 一個例子應該澄清:

input=[[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]],[[13,14,15],[16,17,18]]]
output=[[[1,4],[7,10],[13,16]],[[2,5],[8,11],[14,17]],[[3,6],[9,12],[15,18]]]

我知道我可能可以使用幾個 for 循環,但感覺應該有一個不錯的單行來執行此操作。

我打算將結果分配給變量:

a,b,_=output

使用單個表,我可以提取列:

>>>input=[[1,2,3],[4,5,6]]
>>>list(zip(*input))
[(1, 4), (2, 5), (3, 6)]

或分配:

>>>a,b,_=zip(*input)
>>>a
(1, 4)
>>>b
(2, 5)

但是對於表格列表,我無法做到。 以下是我嘗試失敗的一些事情:

>>>list(zip(*zip(*input)))
[([1, 2, 3], [4, 5, 6]), ([7, 8, 9], [10, 11, 12]), ([13, 14, 15], [16, 17, 18])]
>>>[list(zip(*inp)) for inp in input]
[[(1, 4), (2, 5), (3, 6)], [(7, 10), (8, 11), (9, 12)], [(13, 16), (14, 17), (15, 18)]]
>>>[[x,y,z] for x,y,z in [zip(*inp) for inp in input]]
#same as above
>>> [[x,y] for inp in input for x,y in zip(*inp)]
[[1, 4], [2, 5], [3, 6], [7, 10], [8, 11], [9, 12], [13, 16], [14, 17], [15, 18]]

嵌套/解壓縮的分配對我也不起作用:

>>>[[a,b,_]]=[zip(*inp) for inp in input]
ValueError: too many values to unpack (expected 1)
>>>[*a,*b,*_]=[[x,y] for x,y in [zip(*inp) for inp in input]]
SyntaxError: two starred expressions in assignment

有沒有一條線可以做我想做的事情?

編輯:請注意,雖然該示例具體是 3 個表,每個表有 2 行和 3 列,但我的實際用例有未知數量的表和行。

我最終在我的代碼中使用了這一行:

list(zip(*[zip(*inp) for inp in input]))

你接近了最后一次嘗試。 您還需要一個精心挑選的嵌套級別。 編輯:我添加了最后的zip步驟以獲得所需的排序。 我還使用了“星號”符號來幫助展示如何擴展這個概念。

given = [[[1,2,3],[4,5,6]],
         [[7,8,9],[10,11,12]],
         [[13,14,15],[16,17,18]]]

f1 = [[[a, b] for a, b in zip(list1, list2)] for list1, list2 in given]
print(f1)
f2 = list(zip(*f1))
print(f2)

Output(為便於閱讀而編輯)

[[[1, 4], [2, 5], [3, 6]], 
 [[7, 10], [8, 11], [9, 12]], 
 [[13, 16], [14, 17], [15, 18]]]

[([1, 4], [7, 10], [13, 16]),
 ([2, 5], [8, 11], [14, 17]),
 ([3, 6], [9, 12], [15, 18])]

第二個在中間層有元組而不是列表; 可以嗎? 如果沒有,你能解決它嗎? (留給學生練習……)

暫無
暫無

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

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