簡體   English   中英

我可以訪問每個第 n 個值,每個列表都有一個大列表嗎?

[英]Can I access every nth value, for each list a large list?

Python新手在這里! 我有一個這樣的列表:

list_a = [[a,b,c], [d,e,f]]

而且我正在嘗試找到一種方法來僅查看較大列表中每個列表中的第 n 個值。

即所以 a 和 d 都想要每個中的第一個值

我知道我可以這樣做:

  • a -> list_a[0][0]
  • d -> list_a[1][0]

但是有沒有辦法可以將兩者結合起來形成自己的列表?

謝謝。

使用列表理解

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 行),因為它們已成為行並且現在是子列表。

有多種方法可以做到這一點。

  1. 使用 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')]

請注意,您需要注意矩陣的形狀。 也就是說,所有行(或列)的大小是否相同。 可能需要特殊的異常處理。

  1. 列表理解和傳統的 for 循環。

其他好的答案已經提到了這種方法。 我會在這里跳過它。

  1. 麻木的

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.

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