6

たとえば、次のようなリストがあるとします。

List1 =[7,6,9]
List1 = List1.sort()
4

2 に答える 2

14

list.sort()リストをその場でソートして返すNoneので、実際にはその戻り値をに割り当てていましList1None

>>> List1 =[7,6,9]
>>> repr(List1.sort())
'None'                     #return Value of list.sort
>>> List1                  #though list is sorted
[6, 7, 9]

一方、組み込み関数は新しいソート済みリストをsorted返します。

>>> List1 =[7,6,9]
>>> sorted(List1)
[6, 7, 9]
>>> List1           #List1 is not affected
[7, 6, 9]

sortedtoの結果を代入することはできますが、同じことをより短時間で行うためList1、これは意味がありません。list.sort

>>> List1 = sorted(List1)
>>> List1
[6, 7, 9]

上記のコードは と似てlist.sortいますが、新しいリストを返すため、実際には少し異なります。例:

>>> List1 =[7,6,9]
>>> List2 = List1         # both List1, List2 point to the same object [7, 6, 9]
>>> List1.sort()          # sort List1 in-place, affects the original object
>>> List1, List2
([6, 7, 9], [6, 7, 9])    # both variables still point to the same list

>>> List1 =[7,6,9]
>>> List2 = List1         #same as above
>>> List1 = sorted(List1) #sorted returns a new list, so List1 now points to this new list 
>>> List1, List2          #List2 is still unchanged
([6, 7, 9], [7, 6, 9])

タイミング比較:

>>> from random import shuffle

>>> lis = range(10**5)
>>> shuffle(lis)
>>> %timeit lis.sort()
1 loops, best of 3: 9.9 ms per loop

>>> lis = range(10**5)
>>> shuffle(lis)
>>> %timeit sorted(lis)
1 loops, best of 3: 95.9 ms per loop

したがって、sorted元のリストに影響を与えたくない場合、およびそのリストのソート済みバージョンを他の変数に割り当てたい場合にのみ使用する必要があります。

リストとは別に、settuplesdictsなどの他のデータ構造には独自の.sort()メソッドがないため、sortedそこで使用できる唯一のものです。

>>> s = {1,5,3,6}  # set
>>> sorted(s)
[1, 3, 5, 6]

ヘルプsorted:

>>> print sorted.__doc__
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
于 2013-06-17T06:04:33.530 に答える
6

.sort()リストをその場でソートします。新しいリストは返されません。実際、デフォルトでは何も返さないため、 を返しますNone

ソートされたリストを返したい場合は、次を使用できますsorted()

List1 = sorted(List1)
于 2013-06-17T06:06:24.923 に答える