【问题标题】:Python Swap in Place in a list? x[0], x[1] = x[1], x[0] [duplicate]Python 在列表中就地交换? x[0],x[1] = x[1],x[0] [重复]
【发布时间】:2017-01-19 11:36:49
【问题描述】:

在交换两个列表元素时,我总是创建一个额外的 temp 变量,并且我意识到下面的代码可以工作。 python 是否在计算之前在等号右侧创建内存 x[1],x[0]?谁能详细说明一下?

x = [1,2]
x[0], x[1] = x[1], x[0] #swap elements
print x
>>[2,1]

【问题讨论】:

标签: python


【解决方案1】:

首先计算右侧,结果是一个 new 元组。然后将元组解包并绑定到左侧的每个变量(列表的元素)。

这里使用的临时内存是 RHS 上的元组所需的内存。

请注意,项目是列表的元素这一事实并不重要——“独立”变量也会发生同样的情况。

由于您使用的是列表,因此可以使用切片来实现相同的效果,它还会创建一个临时列表并将其解包:

>>> x = [1, 2, 3, 4]
>>> x[:2] = x[1::-1]
>>> x
[2, 1, 3, 4]

【讨论】:

    【解决方案2】:

    也许这能更好地说明发生了什么:

    >>> a = 1, 2
    >>> a
    (1, 2)
    >>> type(a)
    <type 'tuple'>
    

    如您所见,RHS 被“包装”在一个元组中,然后分配给a

    现在让我们看另一个例子,一个“解构”赋值:

    >>> t = (1, 2)
    >>> a, b = t
    >>> a
    1
    >>> b
    2
    

    现在,如果您将两者结合起来,您应该了解您发布的示例中发生了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 2019-09-18
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      相关资源
      最近更新 更多