Python新手在這里!我有一個這樣的串列:
list_a = [[a,b,c], [d,e,f]]
而且我正在嘗試找到一種方法來僅查看較大串列中每個串列中的第 n 個值。
即所以 a 和 d 都想要每個中的第一個值
我知道我可以這樣做:
- a -> list_a[0][0]
- d -> list_a[1][0]
但是有沒有辦法可以將兩者結合起來形成自己的串列?
謝謝。
uj5u.com熱心網友回復:
使用串列理解:
list_a = [['a','b','c'], ['d','e','f']]
n = 1
list_b = [lst[n] for lst in list_a]
print(list_b)
# ['b', 'e']
uj5u.com熱心網友回復:
我建議你從矩陣的角度考慮這個問題。那是為您的 list_a = [['a','b','c'],['d','e',f']],將其視為具有兩行三列的矩陣。
然后,您在所有子串列中描述為“第 n 個”值的內容本質上是該矩陣中的第 n 列。
像這樣
1 2 3
1 a b c
2 d e f
現在,由于您使用一維串列作為資料結構來表示二維矩陣,因此您只能從一個方向輕松訪問,無論您將其視為行還是列。也就是說,一個子串列只能表示“行方向”或“列方向”
所以想法是切換行和列。我們將此操作稱為轉置。(https://en.wikipedia.org/wiki/Transpose)
行變成列,列變成行。如上例,轉置后,矩陣應變為:
1 2
1 a d
2 b e
3 c f
對應的串列會變成 [['a','d'],['b','e'],['c',f']]
現在您可以使用索引輕松訪問“第 n 列”(現在是第 n 行),因為它們已成為行并且現在是子串列。
有多種方法可以做到這一點。
使用 zip() 您可以使用 python 的內置函式 zip() 進行轉置。
list_a = [['a','b','c'],['d','e','f']] t_list_a = list(zip(*list_a)) t_list_a [('a', 'd'), ('b', 'e'), ('c', 'f')]
請注意,您需要注意矩陣的形狀。也就是說,所有行(或列)的大小是否相同。可能需要特殊的例外處理。
- 串列理解和傳統的 for 回圈。
其他好的答案已經提到了這種方法。我會在這里跳過它。
- 麻木的
numpy 作為一個流行的庫,提供了非常強大的功能來幫助您進行矩陣相關的操作。
import numpy
list_a = [['a','b','c'],['d','e','f']]
t_list_a = numpy.transpose(list_a)
t_list_a
array([['a', 'd'],
['b', 'e'],
['c', 'f']])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/492145.html
上一篇:將字典值(串列)拆分為常量塊
下一篇:Pandas使用串列連接
