【问题标题】:Explanation of iterable object assignment in specific range by list slicing (ex, arr[1:3] = 'ABCD') [duplicate]通过列表切片解释特定范围内的可迭代对象分配(例如,arr[1:3] = 'ABCD')[重复]
【发布时间】:2021-06-20 14:59:16
【问题描述】:
arr = [1, 2, 3, 4, 5]
arr[1:3] = 'ABCD'
arr
[1, 'A', 'B', 'C', 'D', 4, 5]

没错,这段代码没用。我认为没有人使用这样的 python 列表。但我只是因为好奇而想知道结果。

我可以直观地知道一些结果。

旧的arr[1:3] (2, 3) 已消失并被字符串'ABCD' 依次替换。

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

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

【问题讨论】:

  • foo[x:y] = z 实际上等同于foo[:x] + list(z) + foo[y:],除了list(z) 的元素是就地插入的,而不是构建一个新列表。
  • 这能回答你的问题吗? How assignment works with Python list slice? 请注意,this answer 比接受的答案要彻底得多。

标签: python slice variable-assignment


【解决方案1】:

切片分配在右侧采用 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]

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

【讨论】:

  • 非常感谢!它帮助了我:)
猜你喜欢
  • 2018-02-20
  • 1970-01-01
  • 2017-10-22
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2016-12-28
相关资源
最近更新 更多