【问题标题】:Python slice assignment in the reverse order doesn't work! Why? [duplicate]反向顺序的 Python 切片分配不起作用!为什么? [复制]
【发布时间】:2014-10-03 05:57:35
【问题描述】:

关于 Python 如何将列表实际分配​​给现有列表的切片,并没有太多讨论。

例如,我做了以下事情:

l = [1,2,3,4,5,6]

l[2:5:1] = [7,7,7]

print l #prints [1, 2, 7, 7, 7, 6]

g = [1,2,3,4,5,6]

g[5:2:-1] = [7,7,7]

print g #prints [1, 2, 3, 7, 7, 7]

h = [1,2,3,4,5,6]

h[2:5:1] = [7,7,7,7]

print h #prints [1, 2, 7, 7, 7, 7, 6]


k = [1,2,3,4,5,6]

k[5:2:-1] = [7,7,7,7]

print k #gives a runtime error

现场示例:http://ideone.com/0mDBg7

有人可以解释一下这是如何工作的,以及为什么最后一个示例没有像它上面的那样成功运行(运行 h,但不运行 k)?

【问题讨论】:

    标签: python list python-2.7 variable-assignment slice


    【解决方案1】:

    如果切片长度的step不为1,则切片长度和分配序列的长度应该匹配。

    >>> k = [1,2,3,4,5,6]
    >>> len(k[5:2:-1])
    3
    >>> k[5:2:-1] = [7,7,7]  # This is okay, lengths are same.
    >>> k
    [1, 2, 3, 7, 7, 7]
    
    >>> k[5:2:-1] = [7,7,7,7]  # not okay
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: attempt to assign sequence of size 4 to extended slice of size 3
    

    如果切片的长度为1(默认),可以分配一个长度不同的序列;这将改变列表的长度。

    >>> k[1:5] = [1]
    >>> k
    [1, 1, 7]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 2019-10-08
      • 2020-07-16
      • 2018-06-06
      • 2013-03-21
      • 2015-07-22
      • 1970-01-01
      相关资源
      最近更新 更多