插入排序澄清Python

时间:2014-10-23 10:25:29

标签: python sorting

嗨我有一个关于if循环的if语句的问题。我知道您将较小的值与较大的值进行交换,但我不明白为什么将其写为waarde, rij[j] = rij[j], waarde。逗号是Python中的某种交换器吗?

 def insertionsort(rij):            
     for i in range(len(rij)):         
         waarde = rij[i]               
         for j in range(0, i):        
             if waarde<rij[j]:        
                 waarde, rij[j] = rij[j], waarde   
         rij[i] = waarde               

2 个答案:

答案 0 :(得分:1)

在Python中,

a, b = b, a

有效地交换值ab。更准确地说,名称a现在将引用先前由b引用的值,反之亦然。

这称为元组打包/解包。逗号构建元组;交换由=完成。

在幕后发生了什么&#34;&#34;是这样的:

  • 评估元组b, a。您可以将此评估的结果想象为存储在未命名的临时变量中。我们称之为变量temp
  • 现在,赋值运算符=会将temp分配给=左侧的名称。如果左侧只有一个名称,如x = b, a,那么x将被分配为元组b, a
  • 由于左侧有多个名称,temp将被&#34;解包&#34;按顺序分成这些名字。
  • a将被赋予temp[0]的值(其中包含b指向的值),b将被赋予temp[1]的值}。

请注意,双方的名称数量必须匹配:

>>> a = 1
>>> b = 2
>>> c = 3
>>> a, b = c, b, a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)

但是你可以使用元组打包运算符*告诉Python将剩余的值打包成一个名字:

>>> a, *b = c, b, a
>>> a
3
>>> b
[2, 1]

答案 1 :(得分:0)

在Python中,你可以像这样分配多个变量:

a, b = "A", "B"

这就是说:将=右侧的第一个值分配给=左侧的第一个名称,并指定=右侧的第二个值}到=左侧的第二个名字。

您也可以使用三个或更多vars:

a, b, c, d = "A", "B", "C", "D"

您可以使用此功能交换变量值:

a, b = b, a

现在当你打印a时,你会得到&#34; B&#34;当你打印b时,你会得到&#34; A&#34;。