位置: 文档库 > Python > 文档下载预览

《关于python sorted函数的小实例.doc》

1. 下载的文档为doc格式,下载后可用word或者wps进行编辑;

2. 将本文以doc文档格式下载到电脑,方便收藏和打印;

3. 下载后的文档,内容与下面显示的完全一致,下载之前请确认下面内容是否您想要的,是否完整.

点击下载文档

关于python sorted函数的小实例.doc

《关于python sorted函数的小实例》

在Python编程中,排序是数据处理的核心操作之一。无论是处理数字列表、字符串排序,还是对复杂对象进行自定义排序,Python内置的sorted()函数都提供了简洁高效的解决方案。本文将通过多个实例,从基础到进阶,全面解析sorted()函数的使用方法,帮助读者掌握这一实用工具。

一、sorted()函数基础

sorted()是Python内置函数,用于对可迭代对象(如列表、元组、字符串等)进行排序,并返回一个新的排序后的列表。其基本语法如下:

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

参数说明:

  • iterable:需要排序的可迭代对象(如列表、字符串等)。
  • key:可选参数,指定排序的依据(如字符串长度、对象属性等)。
  • reverse:可选参数,默认为False(升序),设为True时为降序。

1.1 数字列表排序

最基础的用法是对数字列表进行升序或降序排序。

numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 输出: [1, 1, 2, 3, 4, 5, 9]

若需降序排序,设置reverse=True

sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)  # 输出: [9, 5, 4, 3, 2, 1, 1]

1.2 字符串排序

对字符串排序时,默认按字符的Unicode码点升序排列。

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

若需将排序后的字符重新组合为字符串,可使用join()方法:

sorted_text_str = ''.join(sorted(text))
print(sorted_text_str)  # 输出: 'hnopty'

二、key参数的高级用法

key参数允许自定义排序规则,通过指定一个函数来提取排序依据。这是sorted()最强大的功能之一。

2.1 按字符串长度排序

对字符串列表按长度排序:

words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # 输出: ['date', 'apple', 'banana', 'cherry']

2.2 按对象属性排序

假设有一个包含字典的列表,需按字典中的某个键值排序:

students = [
    {"name": "Alice", "score": 85},
    {"name": "Bob", "score": 92},
    {"name": "Charlie", "score": 78}
]
sorted_students = sorted(students, key=lambda x: x["score"])
print(sorted_students)
# 输出: [{'name': 'Charlie', 'score': 78}, {'name': 'Alice', 'score': 85}, {'name': 'Bob', 'score': 92}]

2.3 多级排序

若需先按一个键排序,再按另一个键排序,可在key函数中返回元组:

students = [
    {"name": "Alice", "score": 85, "age": 20},
    {"name": "Bob", "score": 92, "age": 19},
    {"name": "Charlie", "score": 78, "age": 20}
]
# 先按score升序,再按age降序
sorted_students = sorted(students, key=lambda x: (x["score"], -x["age"]))
print(sorted_students)
# 输出: [{'name': 'Charlie', 'score': 78, 'age': 20}, {'name': 'Alice', 'score': 85, 'age': 20}, {'name': 'Bob', 'score': 92, 'age': 19}]

注:由于数字无法直接取负实现降序,更通用的方法是使用元组的第二个元素为-x["age"],或分两步排序(先按score,再按age降序)。

三、复杂对象的自定义排序

对于自定义类对象,可通过定义__lt__(小于)方法或使用key参数实现排序。

3.1 定义__lt__方法

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score
    
    def __lt__(self, other):
        return self.score 

3.2 使用key参数(无需修改类)

若不想修改类定义,可通过key参数指定排序依据:

students = [
    Student("Alice", 85),
    Student("Bob", 92),
    Student("Charlie", 78)
]
sorted_students = sorted(students, key=lambda x: x.score)
for student in sorted_students:
    print(student.name, student.score)

四、实际应用案例

4.1 文件名按数字排序

处理文件名时,若需按数字部分排序(如file1.txt, file2.txt, file10.txt),直接排序会得到错误结果。需提取数字部分排序:

import re

filenames = ["file1.txt", "file2.txt", "file10.txt", "file20.txt"]
def extract_number(filename):
    return int(re.search(r'\d+', filename).group())

sorted_filenames = sorted(filenames, key=extract_number)
print(sorted_filenames)  # 输出: ['file1.txt', 'file2.txt', 'file10.txt', 'file20.txt']

4.2 按日期排序

对包含日期的字符串列表排序,需将日期字符串转换为可比较的格式(如时间戳):

from datetime import datetime

dates = ["2023-01-15", "2022-12-01", "2023-03-20"]
sorted_dates = sorted(dates, key=lambda x: datetime.strptime(x, "%Y-%m-%d"))
print(sorted_dates)  # 输出: ['2022-12-01', '2023-01-15', '2023-03-20']

4.3 忽略大小写排序

对字符串列表忽略大小写排序:

words = ["Apple", "banana", "Cherry", "date"]
sorted_words = sorted(words, key=lambda x: x.lower())
print(sorted_words)  # 输出: ['Apple', 'banana', 'Cherry', 'date']

五、性能与注意事项

5.1 sorted()与list.sort()

sorted()返回新列表,原列表不变;list.sort()直接修改原列表,返回None

numbers = [3, 1, 4]
sorted_numbers = sorted(numbers)  # 新列表
numbers.sort()  # 原列表修改
print(numbers)  # 输出: [1, 3, 4]

5.2 稳定性

Python的排序是稳定的,即相等元素的相对顺序不变。例如:

data = [("a", 1), ("b", 2), ("a", 3), ("c", 4)]
# 先按第一个元素排序,再按第二个元素排序
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)
# 输出: [('a', 1), ('b', 2), ('a', 3), ('c', 4)]

5.3 大数据排序

对大数据排序时,key函数的效率至关重要。避免在key中执行复杂计算,可预先计算并存储结果。

六、总结与扩展

sorted()函数是Python中处理排序的利器,通过灵活使用keyreverse参数,可应对绝大多数排序需求。对于更复杂的场景(如多维排序、自定义比较逻辑),可结合functools.cmp_to_key将传统比较函数转换为key函数。

from functools import cmp_to_key

def compare(a, b):
    if a % 2 == b % 2:  # 奇偶性相同
        return a - b    # 按数值升序
    elif a % 2 == 1:   # a是奇数,b是偶数
        return -1       # 奇数排在偶数前
    else:               # a是偶数,b是奇数
        return 1

numbers = [1, 2, 3, 4, 5, 6]
sorted_numbers = sorted(numbers, key=cmp_to_key(compare))
print(sorted_numbers)  # 输出: [1, 3, 5, 2, 4, 6]

关键词:Python、sorted函数、排序算法、key参数、lambda表达式、多级排序、稳定性、性能优化

简介:本文通过基础数字排序、字符串排序、对象属性排序等实例,详细讲解Python中sorted()函数的使用方法,涵盖key参数的高级技巧、多级排序、复杂对象排序及实际应用案例,并分析性能与注意事项。

《关于python sorted函数的小实例.doc》
将本文以doc文档格式下载到电脑,方便收藏和打印
推荐度:
点击下载文档