【python切片】一个有意思的问题:为啥np.array(v[0:3][0]).reshape(3, -1)是错的,而np.array(v[0][0:3]).reshape(3, -1)是不报错的

今天碰到一个奇怪的问题:切片放前面不对,放后面就行,

为啥np.array(v[0:3][0]).reshape(3, -1)是错的,而np.array(v[0][0:3]).reshape(3, -1)是不报错的

让我们来看看这两种情况:

  1. np.array(v[0:3][0]).reshape(3, -1)

在这种情况下,v[0:3]是一个列表切片操作,它将从列表v中取出索引0到2(不包括3)的元素,生成一个新的列表。然后,[0]是对这个新列表的索引操作,取出索引为0的元素。最后,np.array()将这个单一的元素转换为NumPy数组。由于这个单一的元素本身不是一个可迭代对象,所以当你尝试对它使用reshape(3, -1)时会报错。你无法在一个单独的元素上进行reshape操作。

  1. np.array(v[0][0:3]).reshape(3, -1)

在这种情况下,首先v[0]是对列表v的索引操作,取出索引为0的元素,这个元素是一个可迭代对象(可能是另一个列表或数组)。然后,[0:3]是对这个可迭代对象的切片操作,取出索引0到2的元素。接着,np.array()将这个切片转换为NumPy数组,并且可以使用reshape(3, -1)来对这个数组进行reshape操作。

总结来说,第一种情况会报错是因为对单一的元素进行reshape操作是不允许的。而第二种情况不报错是因为在该情况下,对一个可迭代对象进行切片操作后,返回的是一个新的可迭代对象,而不是单一的元素,所以它可以被转换为NumPy数组并进行reshape操作。

你可能感兴趣的:(简单记录,python,开发语言)