[5 min python] 內建函數 - sorted()

更新 發佈閱讀 5 分鐘

Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。

sorted():排序

語法:

sorted(iterable, *, key=None, reverse=False)

sorted() 會回傳一個排序過的新列表,不會修改原本的資料。它可以排序任何可迭代物件(列表、元組、字串、字典等)。

# 基本排序
nums = [3, 1, 4, 1, 5, 9, 2, 6]
result = sorted(nums)
print(result)  # [1, 1, 2, 3, 4, 5, 6, 9]
print(nums)    # [3, 1, 4, 1, 5, 9, 2, 6](原列表不變)

# 降序排列
print(sorted(nums, reverse=True))  # [9, 6, 5, 4, 3, 2, 1, 1]

sorted() vs list.sort()

sorted() 回傳新列表,原資料不變;list.sort() 是就地排序,會修改原列表,回傳 None。

nums = [3, 1, 2]

# sorted() 回傳新列表
new_list = sorted(nums)
print(new_list)  # [1, 2, 3]
print(nums)      # [3, 1, 2](不變)

# list.sort() 就地修改
nums.sort()
print(nums)      # [1, 2, 3](已改變)

用 key 自訂排序規則

key 參數接受一個函數,排序時會用這個函數的回傳值來比較。

# 按字串長度排序
words = ["banana", "pie", "apple", "kiwi"]
print(sorted(words, key=len))  # ['pie', 'kiwi', 'apple', 'banana']

# 按絕對值排序
nums = [-5, 3, -1, 4, -2]
print(sorted(nums, key=abs))   # [-1, -2, 3, 4, -5]

# 不分大小寫排序
names = ["bob", "Alice", "charlie", "David"]
print(sorted(names, key=str.lower))
# ['Alice', 'bob', 'charlie', 'David']

排序各種可迭代物件

# 排序字串(按字元排列)
print(sorted("python"))  # ['h', 'n', 'o', 'p', 't', 'y']

# 排序字典(按 key)
d = {"b": 2, "a": 1, "c": 3}
print(sorted(d))          # ['a', 'b', 'c']
print(sorted(d.items()))  # [('a', 1), ('b', 2), ('c', 3)]

# 按 value 排序字典
print(sorted(d.items(), key=lambda x: x[1]))
# [('a', 1), ('b', 2), ('c', 3)]

小小綜合例子

# 學生成績排名系統
students = [
    {"name": "Alice", "score": 92, "age": 20},
    {"name": "Bob", "score": 85, "age": 22},
    {"name": "Charlie", "score": 92, "age": 19},
    {"name": "Diana", "score": 78, "age": 21},
]

# 按分數排名(高到低)
by_score = sorted(students, key=lambda s: s["score"], reverse=True)
for rank, s in enumerate(by_score, 1):
    print(f"第{rank}名:{s['name']} ({s['score']}分)")

# 多重排序:先按分數(降序),再按年齡(升序)
by_multi = sorted(students, key=lambda s: (-s["score"], s["age"]))
print("\n多重排序結果:")
for s in by_multi:
    print(f"  {s['name']}: {s['score']}分, {s['age']}歲")
留言
avatar-img
艾利斯幻想旅程
8會員
499內容數
網路世界是一個充滿多元性與無限可能的空間,人們可以在此分享資訊、交流思想,並展現無盡的創造力。然而,隨著社交媒體和線上論壇的普及,一種有趣且獨特的現象也隨之興起——廢文。廢文指的是那些內容看似無聊、無害,或表面上毫無意義的帖子、留言或圖片,通常目的在於娛樂或逗趣,而非提供實質價值的資訊。
艾利斯幻想旅程的其他內容
2026/02/21
Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。 range():產生整數序列 語法: range(stop) # 從 0 到 stop-1 r
2026/02/21
Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。 range():產生整數序列 語法: range(stop) # 從 0 到 stop-1 r
2026/02/21
Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。 frozenset():建立不可變集合 語法: frozenset() # 空的不可變集合 froz
2026/02/21
Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。 frozenset():建立不可變集合 語法: frozenset() # 空的不可變集合 froz
2026/02/21
Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。 set():建立集合 語法: set() # 空集合 set(iterable) # 從可迭代物
2026/02/21
Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。 set():建立集合 語法: set() # 空集合 set(iterable) # 從可迭代物
看更多