Python列表排序 list.sort方法和内置函数sorted
发布日期:2021-05-12 20:11:32 浏览次数:21 分类:精选文章

本文共 2267 字,大约阅读时间需要 7 分钟。

Python列表排序方法有两种常用的方式:list.sort()和内置函数sorted(). 它们的使用场景和行为有显著的不同,理解这两种方法的特性对于有效地完成排序任务至关重要。

1. list.sort()方法

list.sort()是一个就地排序方法,它直接将列表修改而不返回新列表。这种方法将修改传递给调用者,通过返回None来指示操作完成。以下是使用list.sort()的示例:

list_a = [1, 2, 8, 3, 7, 9, 5, 7]
list_a.sort()
print("list_a: ", list_a)

运行结果:

list_a:  [1, 2, 3, 5, 7, 7, 8, 9]

由于list.sort()没有返回值,调用者可以知道原列表已经被修改。如果需要链式调用或返回新列表,建议使用sorted()函数进行处理。

2. sorted内置函数

sorted()是一个内置函数,它返回一个新列表作为排序结果,而不是修改原始数据。它广泛接受任何可迭代对象,处理能力强于list.sort(),尤其在处理不同数据类型或生成器时表现优异。以下是sorted()的示例:

list_c = [1, 2, 8, 3, 7, 9, 5, 7]
list_d = sorted(list_c)
print("list_c: ", list_c)
print('list_d: ', list_d)

运行结果:

list_c:  [1, 2, 8, 3, 7, 9, 5, 7]
list_d: [1, 2, 3, 5, 7, 7, 8, 9]

通过该示例可以看出,使用sorted()不会改变原始列表,而是返回一个新的排序后列表,非常适合需要同时保留原数据和排序结果的情况。

3. 关键字参数 key 和 reverse

无论是list.sort()还是sorted(),都支持两个关键字参数:key和reverse。

  • key参数:允许调用一个函数,将这个函数作用于序列中的每个元素,生成比较的依据。例如:
phone = ('HUAWEI', 'OPPO', 'MI', 'MEIZU', 'VIVO')
phone_list = sorted(phone, key=len)
print(phone_list)

输出结果展示了以字符串长度作为排序依据,得到按长度排序后的列表。

  • reverse参数:指定排序顺序为降序。例如:
phone_list_re = sorted(phone, key=len, reverse=True)
print(phone_list_re)

这样,原按升序排列的列表会变成降序排列。

4. 两种方法的对比

  • 原列表修改情况

    • list.sort(): 原始列表被修改。
    • sorted(): 原始列表保持不变。
  • 返回值

    • list.sort(): 返回None。
    • sorted(): 返回新列表。
  • 性能

    • 对于小型数据,两者的性能差异不大,但随着数据规模增大,list.sort()可能更高效。

5. 示例应用场景

1. 生成排序后的新列表

str_e = 'python'
list_e = sorted(str_e)
print(list_e)
# 输出: ['h', 'n', 'o', 'p', 't', 'y']

2. 链式调用

通过sorted()和列表推导式可以实现链式调用:

str_f = '-'.join(sorted(str_e)).upper().split('-')
print(str_f)
# 输出: ['H', 'N', 'O', 'P', 'T', 'Y']

6. 综合练习

# 示例1: 使用list.sort()
list_test = [3, 1, 4]
list_test.sort()
print("排序后的列表:", list_test)
# 输出: [1, 3, 4]
# 示例2: 使用sorted()
sorted_list = sorted(list_test)
print("生成的新列表:", sorted_list)
# 输出: [1, 3, 4]
# 示例3: 使用key和reverse参数
sort phone by length:
phone = ['HUAWEI', 'OPPO', 'MEIZU', 'VIVO', 'MI']
sorted_phone = sorted(phone, key=len)
print("按长度排序的列表:", sorted_phone)
# 输出: ['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI']
排序后的列表按长度降序:
sorted_phone_desc = sorted(phone, key=len, reverse=True)
print("按长度降序排序的列表:", sorted_phone_desc)
# 输出: ['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']

7. 总结

在实际编码时,需要根据具体需求选择合适的方法。如果需要保持原始列表不变,或者需要对非列表数据进行处理,sorted()是一种更灵活且安全的选择。如果对性能要求较高且不需要保留原始数据,list.sort()是更合适的选择。通过理解key和reverse参数,可以进一步定制排序逻辑,满足更多样化的应用需求。

上一篇:Python列表推导式
下一篇:Python with上下文管理及自定义上下文管理

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月02日 14时18分17秒