最近中文字幕国语免费完整,中文亚洲无线码49vv,中文无码热在线视频,亚洲自偷自拍熟女另类,中文字幕高清av在线

當(dāng)前位置: 首頁 > 技術(shù)教程

Python中的列表排序有幾種方法? sort 和 sorted 有何區(qū)別?

  在 Python 數(shù)據(jù)處理中,列表排序是高頻操作,無論是整理數(shù)據(jù)、篩選結(jié)果還是展示信息,都需通過排序讓列表元素按預(yù)期順序排列。Python 提供了多種列表排序方法,其中sort方法與sorted函數(shù)最為常用,但兩者在使用場(chǎng)景與效果上存在關(guān)鍵差異。小編將梳理列表排序的核心方法,詳解sort與sorted的區(qū)別,助你高效完成排序需求。

  一、Python 列表排序的 3 種核心方法

  Python 列表排序可通過 “內(nèi)置方法”“內(nèi)置函數(shù)”“自定義邏輯” 實(shí)現(xiàn),覆蓋從基礎(chǔ)排序到復(fù)雜場(chǎng)景的需求,具體如下:

  (一)list.sort():列表內(nèi)置排序方法

  sort是列表專屬的內(nèi)置方法,直接對(duì)原列表進(jìn)行排序,無需創(chuàng)建新列表,語法為list.sort(key=None, reverse=False)。其中:

  key:指定排序依據(jù)的函數(shù)(如按元素長(zhǎng)度、元素某屬性排序),默認(rèn)值為None(按元素本身排序);

  reverse:布爾值,F(xiàn)alse表示升序(默認(rèn)),True表示降序。

  示例:基礎(chǔ)升序與降序排序

  TypeScript取消自動(dòng)換行復(fù)制

  nums = [3, 1, 4, 2]

  # 升序排序(默認(rèn))

  nums.sort()

  print(nums) # 輸出:[1, 2, 3, 4]

  # 降序排序

  nums.sort(reverse=True)

  print(nums) # 輸出:[4, 3, 2, 1]

  示例:按自定義規(guī)則排序(如字符串長(zhǎng)度)

  TypeScript取消自動(dòng)換行復(fù)制

  words = ["apple", "banana", "cherry", "date"]

  # 按字符串長(zhǎng)度升序排序,key指定len函數(shù)為排序依據(jù)

  words.sort(key=len)

  print(words) # 輸出:["date", "apple", "cherry", "banana"]

  (二)sorted():內(nèi)置全局排序函數(shù)

  sorted是 Python 內(nèi)置的全局函數(shù),可對(duì)任意可迭代對(duì)象(如列表、元組、字典)排序,返回一個(gè)新的排序后列表,原對(duì)象保持不變,語法為sorted(iterable, key=None, reverse=False)。參數(shù)含義與sort一致,但需傳入待排序的可迭代對(duì)象作為第一個(gè)參數(shù)。

  示例:對(duì)列表排序并保留原列表

  TypeScript取消自動(dòng)換行復(fù)制

  original = [5, 2, 7, 1]

  # 排序后返回新列表,原列表不變

  sorted_list = sorted(original)

  print(sorted_list) # 輸出:[1, 2, 5, 7]

  print(original) # 輸出:[5, 2, 7, 1](原列表未變)

  示例:對(duì)元組排序(返回列表)

  TypeScript取消自動(dòng)換行復(fù)制

  tuples = [(2, "b"), (1, "a"), (3, "c")]

  # 按元組第一個(gè)元素升序排序

  sorted_tuples = sorted(tuples, key=lambda x: x[0])

  print(sorted_tuples) # 輸出:[(1, "a"), (2, "b"), (3, "c")]

  (三)自定義排序:借助functools.cmp_to_key

  對(duì)于復(fù)雜排序邏輯(如多條件排序、自定義比較規(guī)則),可使用functools模塊的cmp_to_key函數(shù),將自定義比較函數(shù)轉(zhuǎn)換為key參數(shù)可接受的格式。這種方法適用于無法通過簡(jiǎn)單key函數(shù)實(shí)現(xiàn)的場(chǎng)景。

  示例:多條件排序(先按數(shù)字升序,再按字母降序)

  TypeScript取消自動(dòng)換行復(fù)制

  from functools import cmp_to_key

  data = [(2, "b"), (1, "c"), (2, "a")]

  # 自定義比較函數(shù):x、y為待比較元素

  def compare(x, y):

  # 先按第一個(gè)元素升序:x[0] < y[0]則x在前,返回-1

  if x[0] != y[0]:

  return x[0] - y[0]

  # 第一個(gè)元素相等時(shí),按第二個(gè)元素降序:x[1] > y[1]則x在前,返回-1

  else:

  return -1 if x[1] > y[1] else 1

  # 用cmp_to_key轉(zhuǎn)換比較函數(shù),傳入sorted

  sorted_data = sorted(data, key=cmp_to_key(compare))

  print(sorted_data) # 輸出:[(1, "c"), (2, "b"), (2, "a")]

python3.png

  二、sort與sorted的 4 大核心區(qū)別

  sort與sorted雖都用于排序,但在使用場(chǎng)景、對(duì)原對(duì)象的影響等方面差異顯著,需根據(jù)需求選擇,具體區(qū)別如下:

  (一)作用對(duì)象不同

  sort:僅為列表(list)的內(nèi)置方法,只能對(duì)列表排序,無法用于元組、字典等其他可迭代對(duì)象;

  sorted:全局函數(shù),可對(duì)任意可迭代對(duì)象排序(如列表、元組、字符串、字典的鍵 / 值),適用范圍更廣。

  示例:sorted對(duì)元組排序(sort無法實(shí)現(xiàn))

  TypeScript取消自動(dòng)換行復(fù)制

  t = (3, 1, 2)

  # 正確:sorted對(duì)元組排序,返回列表

  print(sorted(t)) # 輸出:[1, 2, 3]

  # 錯(cuò)誤:元組無sort方法,會(huì)報(bào)錯(cuò)

  t.sort() # AttributeError: 'tuple' object has no attribute 'sort'

  (二)返回值不同

  sort:無返回值(返回None),排序操作直接作用于原列表;

  sorted:返回一個(gè)新的排序后列表,原可迭代對(duì)象保持不變。

  示例:返回值差異對(duì)比

  TypeScript取消自動(dòng)換行復(fù)制

  nums = [3, 1, 2]

  # sort返回None,原列表被修改

  result_sort = nums.sort()

  print(result_sort) # 輸出:None

  print(nums) # 輸出:[1, 2, 3]

  nums2 = [3, 1, 2]

  # sorted返回新列表,原列表不變

  result_sorted = sorted(nums2)

  print(result_sorted) # 輸出:[1, 2, 3]

  print(nums2) # 輸出:[3, 1, 2]

  (三)對(duì)原對(duì)象的影響不同

  sort:原地排序(in-place sorting),直接修改原列表的元素順序,排序后原列表無法恢復(fù)到排序前的狀態(tài);

  sorted:非原地排序,不修改原可迭代對(duì)象,僅通過創(chuàng)建新列表返回排序結(jié)果,原對(duì)象始終保持初始狀態(tài)。

  適用場(chǎng)景差異:若需保留原列表,用sorted;若無需保留原列表,用sort(更節(jié)省內(nèi)存,無需創(chuàng)建新列表)。

  (四)使用靈活性不同

  sort:僅能作為列表方法調(diào)用,語法固定為list.sort(...);

  sorted:可嵌套使用,或作為其他操作的中間步驟(如排序后直接切片、遍歷),靈活性更高。

  示例:sorted嵌套使用(排序后取前 2 個(gè)元素)

  TypeScript取消自動(dòng)換行復(fù)制

  data = [5, 3, 8, 1]

  # sorted排序后直接切片,一步完成

  top2 = sorted(data)[:2]

  print(top2) # 輸出:[1, 3]

  # 若用sort,需多步操作

  data.sort()

  top2_sort = data[:2]

  print(top2_sort) # 輸出:[1, 3]

  Python 列表排序主要有 3 種方法:list.sort()(列表專屬、原地排序)、sorted()(全局函數(shù)、返回新列表)、cmp_to_key(復(fù)雜自定義排序)。其中sort與sorted是日常開發(fā)的核心工具,兩者的關(guān)鍵區(qū)別在于:sort作用于列表、無返回值、修改原列表;sorted適用于所有可迭代對(duì)象、返回新列表、不修改原對(duì)象。

 


猜你喜歡