たとえば、次のようなリストがあるとします。
List1 =[7,6,9]
List1 = List1.sort()
list.sort()
リストをその場でソートして返すNone
ので、実際にはその戻り値をに割り当てていましList1
たNone
。
>>> 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]
sorted
toの結果を代入することはできますが、同じことをより短時間で行うため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
元のリストに影響を与えたくない場合、およびそのリストのソート済みバージョンを他の変数に割り当てたい場合にのみ使用する必要があります。
リストとは別に、set、tuples、dictsなどの他のデータ構造には独自の.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