通过列表切片在特定范围内分配可迭代对象的解释(例如,arr[1:3] = 'ABCD')

Explanation of iterable object assignment in specific range by list slicing (ex, arr[1:3] = 'ABCD')

arr = [1, 2, 3, 4, 5]
arr[1:3] = 'ABCD'
arr
[1, 'A', 'B', 'C', 'D', 4, 5]

确实,这段代码没用。我认为没有人会像这样使用 python 列表。但是好奇想知道结果

看到结果我就直觉了。

old arr[1:3] (2, 3) is gone and replaced by string 'ABCD' sequentially.

但只是关于结果的事实,我无法理解它是如何工作的。

我能得到一些提示或文档来理解这个结果吗?

切片赋值在右侧采用 iterable。许多东西可以是可迭代对象、数组或列表,例如 [8, 9]:

arr = [1, 2, 3, 4, 5]
arr[1:3] = [8, 9]
arr
[1, 8, 9, 4, 5]

字符串是字符的可迭代,如您在本例中所见

for x in 'ABCD':
    print(x)
A
B
C
D

这就是为什么得到你得到的结果。所以如果你想要用一个字符串数组元素替换 arr[1:3] 切片,你需要给它一个产生该元素的迭代:

arr = [1, 2, 3, 4, 5]
arr[1:3] = ['ABCD']
arr
[1, 'ABCD', 4, 5]

注意切片赋值语句中字符串两边的括号。