今天在http://www.pythontip.com刷題的時候遇到一個排序的問題:一個列表中既有字符串,又有數字,該怎麼排序。python
list = [1,2,5,4,'d','s','e',45] list.sort()
若是直接調用sort()函數則會報函數
TypeError Traceback (most recent call last) <ipython-input-9-f338e0e85925> in <module>() ----> 1 list.sort() TypeError: '<' not supported between instances of 'str' and 'int'
我理解的是sort()函數內部是經過'<'來完成大小的比較,而'<'不支持對字符串和數字之間的的比較。ui
後來發現有個sorted()函數可解決字符串和數字一塊兒的排序問題spa
new_list = sorted(list)
sorted()跟sort()的調用方式不太同樣,sorted()是將欲排序的list做爲參數傳入,而後獲得排序後的list,而sort()是在原list的基礎上進行排序。code
sort()函數僅定義在list中,而sorted()對全部的可迭代對象都有效。對象
經過help()查看下二者區別:blog
---------------------------------sorted----------------------------------------
In [14]: help(list.sort)
Help on built-in function sort:排序
sort(...) method of builtins.list instance
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*ip
--------------------------------sorted---------------------------------------
In [15]: help(sorted)
Help on built-in function sorted in module builtins:字符串
sorted(iterable, /, *, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
升序返回一個新的列表包含全部項目的迭代。
能夠提供自定義key函數以自定義排序順序,能夠設置反向標誌以按降序返回結果。