python:如何解释切片的索引

python:如何解释切片的索引,python,Python,代码如下: a = [0, 11, 22, 33, 44, 55] a[1:4][1] = 666 print(a) 输出是[0,11,22,33,44,55] 因此,列表a没有更新,那么该任务的效果如何 [更新] 感谢@Amadan的解释,这很有意义。但我仍然感到困惑,下面的切片直接更新了列表: a[1:4] = [111, 222, 333] 直觉上,我认为[1:4][1]仍在列表中运行,但事实并非如此 我的直觉错了吗 a[1:4]创建一个新列表,其元素为[11,22,33]。然后将其#

代码如下:

a = [0, 11, 22, 33, 44, 55]
a[1:4][1] = 666
print(a)
输出是[0,11,22,33,44,55]

因此,列表a没有更新,那么该任务的效果如何

[更新] 感谢@Amadan的解释,这很有意义。但我仍然感到困惑,下面的切片直接更新了列表:

a[1:4] = [111, 222, 333]
直觉上,我认为[1:4][1]仍在列表中运行,但事实并非如此


我的直觉错了吗

a[1:4]
创建一个新列表,其元素为
[11,22,33]
。然后将其#1元素替换为
666
,从而生成一个列表
[11666,33]
。然后,因为这个列表没有被任何变量引用,所以它被遗忘并被垃圾收集

请注意,如果使用numpy数组而不是列表,则结果会非常不同,因为对numpy数组进行切片将创建一个视图,而不是一个新数组(如果可能的话):

import numpy as np
a = np.array([0, 11, 22, 33, 44])
a[1:4][1] = 666
a
# => array([  0,  11, 666,  33,  44])

在这里,
a[1:4]
不是一个独立的
[11,22,33]
,而是原始列表的视图,其中更改
a[1:4]
实际上会更改
a

a[1:4]
创建一个新列表,其元素是
[11,22,33]
。然后将其#1元素替换为
666
,从而生成一个列表
[11666,33]
。然后,因为这个列表没有被任何变量引用,所以它被遗忘并被垃圾收集

请注意,如果使用numpy数组而不是列表,则结果会非常不同,因为对numpy数组进行切片将创建一个视图,而不是一个新数组(如果可能的话):

import numpy as np
a = np.array([0, 11, 22, 33, 44])
a[1:4][1] = 666
a
# => array([  0,  11, 666,  33,  44])

在这里,
a[1:4]
不是一个独立的
[11,22,33]
,而是原始列表的一个视图,其中更改
a[1:4]
实际上会更改
a

只是另一个解决方案,以防您不知道22的位置(并想将其替换为666)或者不关心从列表中删除其他项目

a = [0, 11, 22, 33, 44, 55]

# make use of enumerate to keep track of when the item is 22 and replace that 
# with the help of indexing count i.e the position at which 22 is and replace it 
# with 666.

for count,item in enumerate(a):
   if item==22:
      a[count]=666
print(a)
输出:

>>>[0, 11, 666, 33, 44, 55]

希望有帮助,干杯

如果您不知道22的位置(并想用666替换它),或者不关心从列表中删除其他项目,那么这只是另一个需要考虑的解决方案

a = [0, 11, 22, 33, 44, 55]

# make use of enumerate to keep track of when the item is 22 and replace that 
# with the help of indexing count i.e the position at which 22 is and replace it 
# with 666.

for count,item in enumerate(a):
   if item==22:
      a[count]=666
print(a)
输出:

>>>[0, 11, 666, 33, 44, 55]

希望有帮助,干杯

切片时,它会创建列表的新副本,而不会创建原始列表。尝试b=a[1:4]和b[1]=666并打印(b)切片时,它会创建列表的新副本,而不会创建原始列表。尝试b=a[1:4],b[1]=666并打印(b)