繁体   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