【问题标题】:Can't reverse a sublist [duplicate]无法反转子列表[重复]
【发布时间】:2016-11-20 16:30:56
【问题描述】:
>>> L = [1, 2, 3, 4]
>>> L[0:2] = [8, 9]
>>> L
[8, 9, 3, 4]
>>> L[0:2].reverse()
>>> L
[8, 9, 3, 4]

你能解释一下为什么L[0:2].reverse() 不改变L 列表吗?

【问题讨论】:

    标签: python list python-3.x reverse


    【解决方案1】:

    L[0:2] 创建列表的新副本,然后L[0:2].reverse() 反转该副本。对切​​片使用赋值和只读取切片之间有很大的区别(调用方法,即使是改变对象的方法,也不会将其转换为赋值)。

    您可以使用切片分配来分配反向副本:

    L[:2] = L[1:None:-1]
    

    L[:2] = reversed(L[:2])
    

    这会将前两个元素以相反的顺序替换为相同的元素:

    >>> L = [42, 81, 13, 7]
    >>> L[:2] = L[1:None:-1]
    >>> L
    [81, 42, 13, 7]
    >>> L[:2] = reversed(L[:2])
    >>> L
    [42, 81, 13, 7]
    

    有关其工作原理的详细信息,另请参阅Explain Python's slice notation

    【讨论】:

    • 我不这么认为,我输入:L[0:2]=[8,9]。它确实改变了列表 L
    • @ĐạtNguyễnThành:是的,因为那是任务L[0:2].reverse() 没有分配任何东西。
    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2013-04-04
    • 2017-02-27
    • 2019-07-05
    相关资源
    最近更新 更多