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