gpt4 book ai didi

python - 添加到列表切片

转载 作者:行者123 更新时间:2023-12-05 02:01:22 30 4
gpt4 key购买 nike

代码为什么会这样

l = [0, 1, 2, 3, 4, 5, 6, 7]
l[2:5] += [10]
print(l)

给出输出

[0, 1, 2, 3, 4, 10, 5, 6, 7]

它是在中间插入 10,但我想将 10 添加到索引 2 到 4。

我也试过

l = [0, 1, 2, 3, 4, 5, 6, 7]
l[2:5] += 10
print(l)

但是它显示了一个错误,说 int 不可迭代。它不应该自动转换为 [10, 10, 10, 10] 并添加到所需的切片吗?

最佳答案

列表可以这样添加:

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]

请注意,左侧列表由右侧扩展,而不是元素相加。

运算符+=(如a += b)等价于a = type(a).__iadd__(a, b)__iadd____add__ 的就地等效项,它是常规 +

在你的例子中,表达式 l[2:5] += [10] 变成了

l[2:5] = list.__iadd__(l[2:5], [10])

在右侧,切片 l[2:5] 提取一个临时对象,通过使用 10 的内容扩展它来就地修改.在左侧,您将元素 2:5 替换为新的、更长的列表。

此时应该很清楚为什么标量赋值完全失败了。

请记住,列表可以包含任何内容,而不仅仅是数字,并且在这些情况下也必须具有合理的行为。如果你想向列表的子集添加一些东西,你必须单独遍历每个元素:

for i in range(2, 5):
l[i] *= 10

如果您处理纯数字数据,Numpy 可能是执行此操作的更好方法。 Numpy 数组完全支持您正在寻找的那种加法运算符:

>>> import numpy as np
>>> a = np.array(l)
>>> a[2:5] += 10
>>> a
array([ 0, 1, 12, 13, 14, 5, 6, 7])

关于python - 添加到列表切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66621889/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com