我可以访问每个列表的第n个值吗?



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行)的索引,因为他们变成了行,现在是一个子列表。

有多种方法可以做到这一点。

  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循环。

这个方法已经被其他好的答案提到过了。我在这里跳过它。

  • 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']])
    

    最新更新