为什么通过切片 2D 列表更改值时未反映列表值?

Why is the list value not reflected when I change the value by slicing the 2D list?

提问人:Seunghye Jeon 提问时间:4/6/2023 最后编辑:Yash MehtaSeunghye Jeon 更新时间:4/6/2023 访问量:24

问:

我创建了 2D 列表,并通过对列表进行切片来更改列表的值。

mylist=[[1,3,5],[3,5,7],[5,7,9]]
mylist[1:2]=[300,400]
mylist

我本以为mylist会回来,但它回来了。[[1,3,5],[300,400],[5,7,9]][[1,3,5],300,400,[5,7,9]]

谁能解释一下?

谢谢。

Python 列表 切片

评论


答:

1赞 ProfDFrancis 4/6/2023 #1

你需要一双额外的[]

这样做是为了得到你想要的:

mylist=[[1,3,5],[3,5,7],[5,7,9]]
mylist[1:2]=[[300,400]]
mylist
print(mylist)

原因:

若要将单个值放入数组中的单个位置,请执行以下操作:

mylist=[[1,3,5],[3,5,7],[5,7,9]]
mylist[1]=300
mylist
print(mylist)

要将列表放在数组中的单个位置,请执行以下操作:

mylist=[[1,3,5],[3,5,7],[5,7,9]]
mylist[1]=[300,400]
mylist
print(mylist)

你告诉它把一个项目列表放到一个位置列表中

突出显示的这段代码描述了一个位置列表,尽管只包含一个位置,即 [1]。

mylist=[[1,3,5],[3,5,7],[5,7,9]]

###########
mylist[1:2]=[300,400]
###########

mylist
print(mylist)

当你告诉它用 y 值列表替换 x 个位置的列表时,Python 正在做它应该做的事情:删除 x 个位置并插入 y 个位置,即如果 x != y 则更改列表的长度。

您需要做的是告诉它用长度为 1 的列表替换位置列表(恰好包含两个值的列表)。

因此,您需要右手边是一个长度为 1 的列表:

            #############
mylist[1:2]=[ [300,400] ]
            #############