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