Python切片赋值是否要求赋值对象为同类型序列?
关于Python切片赋值的文档表述与实际行为的疑问解答
这既不是文档错误,也不是单纯的风格建议,而是你对文档表述的理解存在偏差。
Python官方文档里的这段表述措辞不够精准,实际规则是:赋值给切片的对象只要是可迭代对象即可,而非必须是同类型的序列。列表作为可变序列,在执行切片赋值时,会遍历右侧的可迭代对象,将其中的元素依次替换到切片对应的位置上。
你给出的测试代码完全符合这个规则:
x = [1,2,3,4,5] x[1:3] = (8,9) # 元组是可迭代对象,元素被逐个取出替换切片位置 print(x) # [1, 8, 9, 4, 5] x[1:3] = "ab" # 字符串是字符组成的可迭代对象,每个字符作为单独元素替换 print(x) # [1, 'a', 'b', 4, 5]
甚至你可以用其他类型的可迭代对象,比如生成器,一样能正常运行:
x[1:3] = (i*2 for i in range(2)) print(x) # [1, 0, 2, 4, 5]
文档里的表述可能是想重点强调“主表达式必须返回可变序列对象”(毕竟只有可变序列才能执行切片赋值操作),但关于赋值对象的描述不够准确,正确的要求是可迭代,而非严格同类型的序列。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

