gpt4 book ai didi

python - 为什么 x[i][ :]=x[:][i] where x is a list of lists?

转载 作者:太空狗 更新时间:2023-10-29 21:34:27 24 4
gpt4 key购买 nike

我正在处理一个列表列表,访问列一直很困惑。

假设 x 定义如下:

  x = [[int(np.random.rand()*100) for i in xrange(5)] for x in xrange(10)]
pprint.pprint(x)
[[86, 92, 95, 78, 68],
[76, 80, 44, 30, 73],
[48, 85, 99, 35, 14],
[3, 84, 50, 39, 47],
[3, 7, 67, 28, 65],
[19, 13, 98, 53, 33],
[9, 97, 35, 25, 89],
[48, 3, 48, 5, 1],
[21, 40, 72, 61, 62],
[58, 43, 84, 69, 26]]

现在,x[1][:]x[:][1] 都会产生相同的结果:

[76, 80, 44, 30, 73]

谁能解释一下为什么?谢谢

最佳答案

如果您将每个表达式的两个索引操作分解为单独的部分,则行为非常容易理解。

  • x[1] 将是列表列表中的第二个值(列表 [76, 80, 44, 30, 73])。
  • x[1][:]x[1] 的副本(一个跨越整个列表的切片)。
  • x[:]x(列表的列表)的(浅)副本。
  • x[:][1] 是复制的列表列表中的第二个值,它与 x[1] 是同一个对象。

所以,这两个表达式是相等的。请注意,因为第一个表达式复制列表(末尾有 [:] 切片),所以它们不是同一个对象(x[1][:] 是 x[ :][1] 将为 False)。

如果您使用的是 2D numpy 数组,您会得到不同的行为,因为您可以在任意维度上进行切片(使用稍微不同的语法):

import numpy as np

x = np.array([[86, 92, 95, 78, 68],
[76, 80, 44, 30, 73],
[48, 85, 99, 35, 14],
[3, 84, 50, 39, 47],
[3, 7, 67, 28, 65],
[19, 13, 98, 53, 33],
[9, 97, 35, 25, 89],
[48, 3, 48, 5, 1],
[21, 40, 72, 61, 62],
[58, 43, 84, 69, 26]])

print(x[1,:]) # prints the values of the second row: [76 80 44 30 73]
print(x[:,1]) # prints the values of the second column: [92 80 85 84 7 13 97 3 40 43]

这可能是您正在寻找的。

关于python - 为什么 x[i][ :]=x[:][i] where x is a list of lists?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24687525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com