通过列表切片在特定范围内分配可迭代对象的解释(例如,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]
注意切片赋值语句中字符串两边的括号。
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]
注意切片赋值语句中字符串两边的括号。