Python新手来了!我有一个这样的列表:
list_a = [[a,b,c], [d,e,f]]
我正试图找到一种方法来查看大列表中每个列表中的第n个值。
。所以a和d都需要
中的第一个值我明白我可以这样做:
- 比;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
现在,由于您使用1-D列表作为数据结构来表示2D矩阵,因此您只能从一个方向轻松访问,无论您将其视为行还是列。也就是说,子列表只能表示'行方向'或'列方向'
所以这个想法是交换行和列。我们称这个操作为转置(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
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']])