如何分配python列表片

如何分配python列表片

Pythondoc说切片列表会返回一个新的列表。现在,如果返回一个“新”列表,我对“片上分配”有以下疑问

a = [1, 2, 3]a[0:2] = [4, 5]print a

现在的输出是:

[4, 5, 3]
  1. 返回某物的东西怎么会出现在表达的左边。
  2. 是的,我读了文档,它说这是可能的,现在,既然切片一个列表返回一个“新”列表,为什么原始列表被修改,我无法理解背后的机制。


凤凰求蛊
浏览 328回答 3
3回答

拉风的咖菲猫

您混淆了两个使用非常相似语法的不同操作:1)切片:b = a[0:2]的切片的副本。a并分配给b.2)切片分配:a[0:2] = b这,这个取代.的一片a带着.的内容b.虽然语法是相似的(我可以想象!),但这是两个不同的操作。

慕后森

我以前也遇到过同样的问题,这与语言规范有关。根据任务-报表,如果分配的左边是订阅,Python将调用__setitem__在那个物体上。a[i] = x等于a.__setitem__(i, x).如果赋值的左边是片,Python也会调用__setitem__,但有不同的论点:a[1:4]=[1,2,3]等于a.__setitem__(slice(1,4,None), [1,2,3])这就是为什么‘=’左边的列表切片的行为有所不同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python