python - 无法在 Python 的列表列表中索引多个元素(使用 : operator)

标签 python arrays list matrix indexing

我发现不支持使用 range(:) 运算符对列表列表进行索引很奇怪。

有时这会导致奇怪的值:

a = [[1, 2], [3, 4], [5, 6], [7, 8]]
>>> a
[[1, 2], [3, 4], [5, 6], [7, 8]]
>>> a[0][1]
2
>>> a[1][1]
4
>>> a[2][1]
6

但是,

>>> a[0:3][1]
[3, 4]

我期待 [2,4,6]。我在这里错过了什么?

我也在 Numpy 数组上试过这个。在此处输入代码

>>> a
[[1, 2], [3, 4], [5, 6], [7, 8]]
>>> a[0][1]
2
>>> a[1][1]
4
>>> a[2][1]
6
>>> a[0:3][1]
[3, 4]

我知道我可以使用列表理解,但我的问题是“:”是否支持列表的列表?

最佳答案

numpy 数组确实支持切片,但您没有考虑数组的形状。在 numpy 中,这个数组的形状是:

import numpy as np
a = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
print(a.shape)
>>>(4, 2)

表示它是 4x2。如果您对 [0:3] 进行切片,您将返回第一维的前三个元素。即:

print(a[0:3])
>>>[[1 2]
    [3 4]
    [5 6]]

这个输出有形状:

print(a[0:3].shape)
>>>(3, 2)

如果你这样做:

print(a[0:3][1])
>>>[3 4]

您再次调用形状为 (3, 2) 的数组第一维的第一个元素。

相反,你想调用:

print(a[0:3][:,1])
>>>[2 4 6]

它为您提供列索引 1 处的所有行元素(即第一维的所有三个元素)(其中 0 和 1 表示第二维的两个维的索引)。

更干净(推荐):

print(a[0:3, 1])
>>>[2 4 6]

关于python - 无法在 Python 的列表列表中索引多个元素(使用 : operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57528303/

相关文章:

java - 如何在选择时在卡片 View 上添加一个框?

Python MySQLdb 在一行中多次使用 %S

python super() - __new__ 上下文中的两个参数版本

python - 有没有更自动化的方法来发现子字符串?

python - Matplotlib 3D 散点图中的颜色丢失

用于 zigzag 的 java 数组有效,但测试人员一直告诉我有错误?

javascript - 如何从 JSON 对象中获取匹配的键值?

c++ - 如何在不使用内置函数的情况下反转句子中的单词?

python - 如何在 Python 中不使用循环和 join() 将列表转换为字符串

r - 将 data.frames 列表的列表转换为 R 中的单个 data.frame