[英]Can I access every nth value, for each list a large list?
Python新手在這里! 我有一個這樣的列表:
list_a = [[a,b,c], [d,e,f]]
而且我正在嘗試找到一種方法來僅查看較大列表中每個列表中的第 n 個值。
即所以 a 和 d 都想要每個中的第一個值
我知道我可以這樣做:
但是有沒有辦法可以將兩者結合起來形成自己的列表?
謝謝。
使用列表理解:
list_a = [['a','b','c'], ['d','e','f']]
n = 1
list_b = [lst[n] for lst in list_a]
print(list_b)
# ['b', 'e']
我建議你從矩陣的角度考慮這個問題。 那是為您的 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')]
請注意,您需要注意矩陣的形狀。 也就是說,所有行(或列)的大小是否相同。 可能需要特殊的異常處理。
其他好的答案已經提到了這種方法。 我會在這里跳過它。
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']])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.