sort、sorted排序技巧(多级排序)

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。
示例:

1)排序基础
简单的升序排序是非常容易的。只需要调用sorted()方法。它返回一个新的list,新的list的元素基于小于运算符( lt )来排序。

你也可以使用list.sort()方法来排序,此时list本身将被修改。通常此方法不如sorted()方便,但是如果你不需要保留原来的list,此方法将更有效。

另一个不同就是list.sort()方法仅被定义在list中,相反地sorted()方法对所有的可迭代序列都有效。

2)key参数/函数
从python2.4开始,list.sort()和sorted()函数增加了key参数来指定一个函数,此函数将在每个元素比较前被调用。 例如通过key指定的函数来忽略字符串的大小写:

key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较。这个技术是快速的因为key指定的函数将准确地对每个元素调用。

更广泛的使用情况是用复杂对象的某些值来对复杂对象的序列排序,例如:

同样的技术对拥有命名属性的复杂对象也适用,例如:

3)Operator 模块函数(多级排序)

上面的key参数的使用非常广泛,因此python提供了一些方便的函数来使得访问方法更加容易和快速。operator模块有itemgetter,attrgetter,从2.6开始还增加了methodcaller方法。使用这些方法,上面的操作将变得更加简洁和快速:

operator模块还允许多级的排序,例如,先以grade,然后再以age来排序:

4)升序和降序

list.sort()和sorted()都接受一个参数reverse(True or False)来表示降序或升序排序。
例如对上面的student降序排序如下:

5)排序的稳定性和复杂排序

从python2.2开始,排序被保证为稳定的。意思是说多个元素如果有相同的key,则排序前后他们的先后顺序不变。

注意在排序后'blue'的顺序被保持了,即'blue', 1在'blue', 2的前面。

更复杂地你可以构建多个步骤来进行更复杂的排序,例如对student数据先以grade降序排列,然后再以age升序排列。



  • sort銆sorted鎺掑簭鎶宸(澶氱骇鎺掑簭)
    绛旓細1锛鎺掑簭鍩虹 绠鍗曠殑鍗囧簭鎺掑簭鏄潪甯稿鏄撶殑銆傚彧闇瑕佽皟鐢sorted()鏂规硶銆傚畠杩斿洖涓涓柊鐨刲ist锛屾柊鐨刲ist鐨勫厓绱犲熀浜庡皬浜庤繍绠楃( lt )鏉ユ帓搴忋備綘涔熷彲浠ヤ娇鐢╨ist.sort()鏂规硶鏉ユ帓搴忥紝姝ゆ椂list鏈韩灏嗚淇敼銆傞氬父姝ゆ柟娉曚笉濡俿orted()鏂逛究锛屼絾鏄鏋滀綘涓嶉渶瑕佷繚鐣欏師鏉ョ殑list锛屾鏂规硶灏嗘洿鏈夋晥銆傚彟涓涓笉鍚屽氨鏄痩is...
  • python甯歌鐨勪笁绉嶅垪琛鎺掑簭绠楁硶鍒嗗埆鏄粈涔?
    绛旓細python涓湁涓ょ鎺掑簭鏂规硶锛宭ist鍐呯疆sort()鏂规硶鎴栬卲ython鍐呯疆鐨勫叏灞sorted()鏂规硶浜岃呭尯鍒负锛歴ort()鏂规硶瀵筶ist鎺掑簭浼氫慨鏀筶ist鏈韩锛屼笉浼氳繑鍥炴柊list銆俿ort()鍙兘瀵筶ist杩涜鎺掑簭銆俿orted()鏂规硶浼氳繑鍥炴柊鐨刲ist锛屼繚鐣欏師鏉ョ殑list銆傚厛璇磖everse锛岃繖涓緢绠鍗曪紝灏辨槸鎸囧嚭鏄惁杩涜鍊掑簭鎺掑簭锛氫竴鑸儏鍐典笅锛1鎺掑湪2鐨勫墠闈紝...
  • python鎬庝箞瀵规暟缁鎺掑簭?python鏁扮粍鎺掑簭鏂规硶
    绛旓細1锛塴ist.sort()鏂规硶杩斿洖none锛宻orted()杩斿洖缁撴灉 2锛塴ist.sort()鏂规硶鍙彲浠ヤ緵鍒楄〃浣跨敤锛岃宻orted()鍑芥暟鍙互鎺ュ彈浠绘剰鍙凯浠e璞★紙iterable锛3.鎻掑叆鎺掑簭娉 閫傜敤浜庡皯閲忔暟鎹殑鎺掑簭锛屾椂闂村鏉傚害涓篛(n^2),閫愪釜鍚戝墠閬嶅巻 4.甯屽皵鎺掑簭 棣栧厛澧為噺涓2锛屽垎鎴恖en()/2缁勶紝涓や袱姣旇緝 鐒跺悗鍑忓皬澧為噺鍒嗘垚len()/2/2缁勶紝...
  • python 鎺掑簭,sort鍜sorted鐨勫尯鍒槸浠涔?
    绛旓細>>>sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})[1,2,3,4,5] #sorted()瀵规墍鏈夌殑鍙凯浠e簭鍒楅兘鏈夋晥 鍦╬ython2.4寮濮嬶紝list.sort()鍜宻orted()澧炲姞key鍙傛暟鏉ユ寚瀹氫竴涓嚱鏁帮紝姝ゅ嚱鏁板湪姣忎釜鍏冪礌姣旇緝鍓嶈璋冪敤銆侲xample2锛>>>sorted("This is a test string from Andrew"...
  • 娣卞叆鐞嗚Вpython涓殑鎺掑簭sort
    绛旓細list.sort()鍜sorted()鍑芥暟閮芥湁涓涓猭ey鍙傛暟锛屽彲浠ョ敤鏉ユ寚瀹氫竴涓嚱鏁版潵纭畾鎺掑簭鐨勪竴涓紭鍏堢骇銆傛瘮濡傦紝杩欎釜渚嬪瓙灏辨槸鏍规嵁澶у皬鍐欑殑浼樺厛绾ц繘琛屾帓搴忥細key鍙傛暟鐨勫煎簲璇ユ槸涓涓嚱鏁帮紝杩欎釜鍑芥暟鎺ュ彈涓涓弬鏁扮劧鍚庤繑鍥炰互涓涓猭ey锛岃繖涓猭ey灏辫鐢ㄤ綔杩涜鎺掑簭銆傝繖涓柟娉曞緢楂樻晥锛屽洜涓哄浜庢瘡涓涓緭鍏ョ殑璁板綍鍙渶瑕佽皟鐢ㄤ竴娆ey...
  • python 鎺掑簭,sort鍜sorted鐨勫尯鍒槸浠涔?
    绛旓細sort鏄竴涓兼垨鍙橀噺绛夌殑涓涓爲褰紝瀵硅嚜宸辩殑鍊艰繘琛鎺掑簭銆傚 a = [1,3,5,7,4,2]a.sort()涔嬪悗锛屽啀print a 灏变細鍙戠幇a鐨勫煎凡缁忚鎺掑簭浜嗐俒1,2,3,4,5,7]sorted鏄竴涓懡浠わ紝鍙互瀵逛换浣昳nteger鎺掑簭銆傚 a = [2,4,6,8,3,2,1]sorted(a)锛岃緭鍑虹殑灏辨槸 [1,2,2,3,4,6,8]锛屽彲浠ユ妸...
  • sort鍜sorted鍑芥暟鐨勫尯鍒槸浠涔?
    绛旓細1銆乻ort鍑芥暟锛歴ort鍑芥暟娌℃湁杩斿洖鍊硷紝浼氭敼鍙樺師鍏冪礌鐨勫笺2銆sorted鍑芥暟锛歴orted鍑芥暟鏈夎繑鍥炲硷紝涓嶄細鏀瑰彉鍘熷厓绱犵殑鍊笺備簩銆佽娉曚笉鍚 1銆乻ort鍑芥暟锛歴ort鐢ㄦ硶鏄痵ort(cmp=None锛宬ey=None锛宺everse=False)銆2銆乻orted鍑芥暟锛歴orted鐢ㄦ硶鏄痵orted(iterable锛宑mp=None锛宬ey=None锛宺everse=False)銆備笁銆佸嚱鏁扮殑瀹氫箟褰㈠紡...
  • sort榛樿鎸変粈涔鎺掑簭
    绛旓細鍦ㄧ紪绋嬩腑锛岀壒鍒槸浣跨敤Python绛夎瑷鏃锛宻ort鏂规硶鎴栧嚱鏁帮紙鎴栧叾鍙樹綋濡sorted锛夌殑榛樿鎺掑簭琛屼负鏄緷鎹厓绱犵殑鑷劧椤哄簭杩涜鍗囧簭鎺掑簭銆傚浜庢暟瀛楃被鍨嬶紙濡傛暣鏁板拰娴偣鏁帮級锛岃繖鎰忓懗鐫鎸夌収鏁板间粠灏忓埌澶х殑椤哄簭鎺掑垪銆傚浜庡瓧绗︿覆绫诲瀷锛屾帓搴忓垯鏄熀浜庡瓧绗︿覆涓瓧绗︾殑Unicode鐮佺偣鍊硷紝浠庡乏鍒板彸渚濇姣旇緝锛屼篃鏄崌搴忔帓鍒椼傚鏋滄帓搴忕殑...
  • sort鍦╬ython涓殑鐢ㄦ硶
    绛旓細鍦╬ython涓锛宻ort鏄垪琛鎺掑簭鐨勪竴绉嶆柟娉曪紝璋冪敤鏂瑰紡涓簂ist.sort锛堬級锛岃繖鏍蜂細鏀瑰彉鍘熸潵鍒楄〃鐨勫笺俿ort锛坘ey锛宺everse锛夋柟娉曟湁key鍜宺everse涓ょ鍙傛暟锛屽叾涓璳ey琛ㄧず鐨勬槸鎺掑簭鐨勫叧閿瓧锛宺everse琛ㄧず鐨勬槸鎺掑簭鐨勬柟寮忥紙reverse=False琛ㄧず鍗囧簭鍜宺everse=True琛ㄧず闄嶅簭锛夈俿ort锛堬級鏂规硶榛樿鏄崌搴忔帓搴忥紝鍗抽粯璁everse=False銆
  • python鏁版嵁鍚屾椂鎺掑簭
    绛旓細涓銆佸熀鏈殑鎺掑簭 鏈鍩烘湰鐨勬帓搴忓緢绠鍗曘傚彧瑕佷娇鐢sorted()鍑芥暟鍗冲彲杩斿洖涓涓 鏂扮殑鎺掑簭鐨勫垪琛 >>>sorted([5, 2, 3, 1, 4])[1, 2, 3, 4, 5]鍜变滑涔熷彲浠ヤ娇鐢 list.sort()鏂规硶銆傝鏂规硶鏄鍒楄〃list杩涜鐨勫師鍦版搷浣(鍘熸暟鎹淇敼锛屽凡缁忎笉鏄師鏉ョ殑鏈潵闈㈢洰)銆備竴鑸儏鍐典笅锛屼笉濡備娇鐢 sorted()鏂逛究锛...
  • 扩展阅读:sort方法和sorted方法区别 ... sorted out ... sorted默认什么排序 ... sort方法和sorted函数 ... sorted和sort函数区别 ... appreciate ... sorted函数降序排序 ... phenomenon ... is sorted ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网