【Python】sorted() 函数:对可迭代对象进行排序

Python 中的 sorted() 函数

sorted() 是 Python 的一个内置函数,用于对可迭代对象(如 列表、元组、字符串、字典 等)进行排序,并返回一个新的排序后的列表(不会修改原对象)。


1. sorted() 函数的基本语法

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

参数说明

  • iterable:要排序的可迭代对象,如 listtuplestrdict(按键排序)等。
  • key(可选):指定排序依据的函数,默认为 None,即按默认规则排序。
  • reverse(可选):是否降序排序,默认为 False(升序)。若 True,则降序排序。

返回值

  • 返回一个 新的排序后的 list,不会改变原来的 iterable

2. sorted() 基本示例

(1) 对列表进行排序

numbers = [5, 2, 9, 1, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers)

输出

[1, 2, 5, 7, 9]

原列表 numbers 不会被修改sorted() 返回一个新的排序列表。


(2) 逆序排序

使用 reverse=True 进行降序排序:

sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)

输出

[9, 7, 5, 2, 1]

(3) 对字符串排序

字符串会按照 ASCII 码 进行排序:

chars = "python"
sorted_chars = sorted(chars)
print(sorted_chars)

输出

['h', 'n', 'o', 'p', 't', 'y']

sorted() 返回的是一个列表,如果想要得到字符串,可以使用 ''.join(sorted_chars)


3. key 参数:自定义排序规则

key 允许你提供一个函数,对元素进行自定义排序

(1) 按字符串长度排序

words = ["banana", "apple", "cherry", "blueberry"]
sorted_words = sorted(words, key=len)
print(sorted_words)

输出

['apple', 'banana', 'cherry', 'blueberry']

key=len 表示按照字符串长度进行排序。


(2) 按绝对值大小排序

numbers = [-10, 5, -3, 2, -8]
sorted_numbers = sorted(numbers, key=abs)
print(sorted_numbers)

输出

[2, -3, 5, -8, -10]

key=abssorted() 按照绝对值大小 进行排序。


(3) 按某个属性排序(适用于字典和对象)

假设有一组字典

students = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 22},
    {"name": "Charlie", "age": 23}
]

可以按照 age 进行排序:

sorted_students = sorted(students, key=lambda x: x["age"])
print(sorted_students)

输出

[
    {'name': 'Bob', 'age': 22},
    {'name': 'Charlie', 'age': 23},
    {'name': 'Alice', 'age': 25}
]

4. sorted()sort() 的区别

方法返回值是否修改原列表适用对象
sorted()返回一个新的排序列表不会 修改原列表任何可迭代对象
.sort()返回 None 直接修改原列表仅适用于 list

示例

numbers = [5, 3, 8, 1]
sorted_numbers = sorted(numbers)  # 不修改原列表
print(sorted_numbers)  # [1, 3, 5, 8]
print(numbers)  # [5, 3, 8, 1]

numbers.sort()  # 直接修改原列表
print(numbers)  # [1, 3, 5, 8]

5. sorted() 高级用法

(1) 按多个条件排序

如果想要 先按年龄排序,再按名字排序,可以使用 tuple 作为 key

students = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 22},
    {"name": "Charlie", "age": 23},
    {"name": "Alice", "age": 22}
]

sorted_students = sorted(students, key=lambda x: (x["age"], x["name"]))
print(sorted_students)

输出

[
    {'name': 'Alice', 'age': 22},
    {'name': 'Bob', 'age': 22},
    {'name': 'Charlie', 'age': 23},
    {'name': 'Alice', 'age': 25}
]

先按 age 排序,如果 age 相同,再按 name 排序。


(2) 按字符串中字符出现频率排序

text = "banana"
sorted_text = sorted(text, key=lambda c: text.count(c), reverse=True)
print("".join(sorted_text))

输出

aaannb

按照字符在 text 中的出现次数排序(从多到少)。


(3) 对字典的键值排序

data = {"apple": 3, "banana": 1, "cherry": 2}

# 按 key 排序
sorted_by_key = sorted(data.items(), key=lambda x: x[0])

# 按 value 排序
sorted_by_value = sorted(data.items(), key=lambda x: x[1])

print(sorted_by_key)    # [('apple', 3), ('banana', 1), ('cherry', 2)]
print(sorted_by_value)  # [('banana', 1), ('cherry', 2), ('apple', 3)]

总结

功能示例
基本排序sorted([5, 2, 9, 1])
降序排序sorted([5, 2, 9, 1], reverse=True)
按字符串长度排序sorted(["apple", "banana"], key=len)
按绝对值排序sorted([-10, 5, -3], key=abs)
按字典属性排序sorted(students, key=lambda x: x["age"])
按多个条件排序sorted(students, key=lambda x: (x["age"], x["name"]))
按字符频率排序sorted("banana", key=lambda c: "banana".count(c), reverse=True)

🔹 sorted() 适用于

  • 排序列表、字符串、元组等
  • 按自定义规则排序
  • 不会修改原数据
  • 适用于需要排序但不希望修改原数据的场景

如果需要就地排序(原地修改列表),请使用 .sort() 方法。否则,sorted() 是更灵活的选择。

Pythonsorted函数可以用于对对象进行排序,根据对象的某个属性值进行排序sorted函数可以接受一个可迭代对象作为参数,并返回一个经过排序的新的列表。 在对对象进行排序时,可以使用sorted函数的key参数来指定排序的依据。key参数可以传入一个函数,这个函数将作用于可迭代对象的每个元素,返回一个用于排序的值。通过指定key参数,可以让sorted函数根据对象的某个属性值进行排序。 例如,如果有一个对象列表,每个对象都有一个属性name,我们可以使用sorted函数按照对象的name属性进行排序。可以通过定义一个lambda函数作为key参数,对每个对象的name属性进行访问并返回,以此来实现排序。 具体的代码如下: ```python class Person: def __init__(self, name, age): self.name = name self.age = age # 创建对象列表 people = [Person('Alice', 25), Person('Bob', 30), Person('Charlie', 20)] # 根据name属性进行排序 sorted_people = sorted(people, key=lambda x: x.name) for person in sorted_people: print(person.name, person.age) ``` 运行以上代码,输出结果将按照对象的name属性进行升序排序: ``` Alice 25 Bob 30 Charlie 20 ``` 通过指定key参数,并传入一个lambda函数,我们可以对对象进行排序,以满足特定需求。此外,sorted函数还可以通过reverse参数来指定排序的顺序,False表示升序排列,True表示降序排列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值