0

みんな、私がなんとか出力したこの奇妙な振る舞いを理解するのを手伝ってください。

>>> a = [1, 4, 3, 2]
>>> a
[1, 4, 3, 2]
>>> b = a.sort()
>>> a
[1, 2, 3, 4]
>>> 

「b = a.sort()」がリスト「a」をソートするのはなぜですか?

4

1 に答える 1

3

a.sort()IN-PLACE をソートします。これは、 の内容aが変更されたことを意味します。
さらにbNone

あなたが探しているのはb = sorted(a)、のコンテンツのソートされたコピーを作成し、aそれをbに保存することだと思います

>>> a = [1,4,3,2]
>>> b = sorted(a)
>>> a
[1, 4, 3, 2]
>>> b
[1, 2, 3, 4]
>>> b = a.sort()
>>> a
[1, 2, 3, 4]
>>> b
>>>

a.sort()のソートされた内容をソートしaて割り当てます(これは、IN-PLACE のソートの意味のようなものです)。したがって、戻り値はありません (これは の戻り値と同じです。 Soが呼び出され、これは IN-PLACE をソートし、そのようなソートの戻り値 (これは) を取り、その戻り値を(したがって、なし)。aaNonea.sort()Nonebb

を実行するとb=a.count(2)a.count(2)が呼び出され、整数 (この場合は1) が返されます。この戻り値は に割り当てられます。これにより、値が含まれるbようになります。b2

>>> a = [1,4,3,2]
>>> a.count(2)
1
>>> b = a.count(2)
>>> b
1
>>> 

同様に、 を実行するとb=a.sort()a.sort()が呼び出され ( IN-PLACEa.sort()の項目をソートする呼び出し)、 が返されます。この戻り値は に割り当てられます。aNoneb

さて、上記の例では、呼び出しの戻り値が何にも代入されていないという事実にもかかわらず、依然としてina.count(2)の出現回数をカウントしています。これは、結果が何にも割り当てられていないにもかかわらず、並べ替えの背後にある正確なロジックです。2aa.count(2)a.sort()a

于 2013-11-08T06:26:42.700 に答える