【发布时间】:2018-06-09 21:56:57
【问题描述】:
我遇到了以下代码(有点):
my_list = [1, [2, 3, 4], 5]
my_list[1:2] = my_list[1]
运行这两行后,变量my_list 将是[1, 2, 3, 4, 5]。对于扩展嵌套列表非常有用。
但为什么它实际上做了它所做的事情?
我会假设语句 my_list[1:2] = my_list[1] 会执行以下操作之一:
- 只需将
[2, 3, 4]放在列表中的第二个位置(它已经在该位置) - 给出某种“太多值无法解包”错误,从尝试将三个值(即 2,3,4)放入长度仅为 1 的容器(即
my_list[1:2])。 (使用 Numpy 数组而不是列表重复上述操作会导致类似的错误。)
其他问题(例如How assignment works with python list slice)往往不太注意要替换的切片大小与您要替换的项目大小之间的差异。 (更不用说解释它为什么会这样工作了。)
【问题讨论】:
-
my_list = [1,2,3]; my_list[1:2] = [9,8,7]=>[1, 9, 8, 7,3]我认为用 list 替换 slice 时这是 python 的常见行为 -
使用这个
my_list[1:2] = [my_list[1]] -
我在那里编辑了一个答案,明确提到您可以在作业的两侧使用不同大小的列表。 “更不用说解释它为什么会这样工作了。” 你期望得到什么样的答案? stackoverflow.com/a/10623352/2301450 和 stackoverflow.com/a/35632876/2301450 都是正确的。
-
我希望得到一个详细说明我误解或不熟悉的语言机制的答案(这应该起作用的根本原因,例如“容器被实现为双链表,因此将单个元素设置为多个元素会自动起作用,因为 blah blah")。真正的答案原来是一个非常平凡的“因为我们为列表神奇地制作了这项工作,但没有别的”。 (当我注意到它不适用于 Numpy 数组时,我担心这会是答案。)
标签: python