欢迎访问宙启技术站
智能推送

实用的Python函数:列表排序和过滤

发布时间:2023-05-21 22:37:27

在Python中,列表是一个非常常用的数据类型,它可以保存一组任意类型的数据,并且可以进行一系列的操作,比如添加、删除、查找、排序等等。本文将介绍两个非常实用的列表操作:排序和过滤。

一、列表排序

列表排序是将列表中的元素按照一定规则进行排序,常见的排序规则包括升序、降序、以某个属性排序等等。在Python中,常用的排序函数是sorted()和sort(),它们的区别是sorted()会返回排好序的新列表,而sort()则是对原列表进行排序。

1. 列表排序(升序)

sorted()函数可以对列表进行排序,下面是一个简单的例子:

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

2. 列表排序(降序)

sorted()函数可以接收一个reverse参数,当reverse为True时,会按照降序进行排序,下面是一个例子:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

sort()函数也可以对列表进行排序,不同的是,sort()是在原列表上进行排序,没有返回值。下面是一个例子:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

3. 列表排序(以某个属性排序)

除了按照升序或降序进行排序外,还可以按照某个属性进行排序。举个例子,假设有一个列表,每个元素都是一个字典,字典包含name和age两个属性,现在需要按照age进行排序,可以使用sorted()函数,并对key参数指定为age:

people = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 35},
    {"name": "Charlie", "age": 20},
    {"name": "David", "age": 40},
    {"name": "Eve", "age": 30}
]
sorted_people = sorted(people, key=lambda x: x["age"])
print(sorted_people)
# [
#     {'name': 'Charlie', 'age': 20},
#     {'name': 'Alice', 'age': 25},
#     {'name': 'Eve', 'age': 30},
#     {'name': 'Bob', 'age': 35},
#     {'name': 'David', 'age': 40}
# ]

二、列表过滤

列表过滤是指从一个列表中筛选出满足某个条件的元素,常见的条件有:大于某个数、小于某个数、以某个字母开头等等。在Python中,常用的过滤函数有filter()和列表推导式。

1. 列表过滤(大于某个数)

filter()函数可以根据判断条件对列表进行过滤,下面是一个例子,筛选列表中大于3的数:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
filtered_numbers = list(filter(lambda x: x > 3, numbers))
print(filtered_numbers) # [4, 5, 9, 6, 5, 5]

2. 列表过滤(小于某个数)

同理,可以通过修改filter()函数的判断条件,来筛选小于某个数的元素,下面是一个例子:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
filtered_numbers = list(filter(lambda x: x < 3, numbers))
print(filtered_numbers) # [1, 1, 2]

3. 列表过滤(以某个字母开头)

除了根据大小进行过滤外,还可以根据元素的某个属性进行过滤,举个例子,假设有一个列表,每个元素都是一个字符串,现在需要筛选以某个字母开头的字符串,可以使用列表推导式,并对if条件进行修改:

names = ["Alice", "Bob", "Charlie", "David", "Eve"]
filtered_names = [name for name in names if name.startswith("A")]
print(filtered_names) # ["Alice"]

总结:

以上就是Python中列表排序和过滤的两种常用方法的介绍和实例演示。知道如何对列表进行排序和过滤,可以使程序更加高效,并且可以避免很多繁琐的手动操作。如果在实际工作中遇到需要对列表进行排序和过滤的情况,可以参考本文的方法进行处理。