如何在Python中使用filter函数根据某一条件过滤列表元素?
发布时间:2023-06-17 14:46:16
在Python中使用filter函数可以很方便的在列表中根据某一条件进行元素的过滤,filter函数接受两个参数,分别为函数和需要过滤的数据。
函数参数为一个函数对象,该函数将被应用于序列中的每个元素,如果该函数返回值为True,则该元素将被保留,否则将被过滤掉;
需要过滤的数据参数可以是任何可迭代的数据结构,如列表、元组、字典等。
下面分两种情况,具体演示如何使用filter函数根据条件进行列表元素过滤。
情况一:根据单个条件过滤列表元素
当需要根据某个单一条件过滤列表元素时,可以使用一个lambda函数作为filter的第一个参数,lambda函数为单行函数,可以快速定义一个只需一次使用的小型函数。
下面是一个示例,根据奇偶性过滤数字列表。
# 根据奇偶性过滤数字列表
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_nums = list(filter(lambda x: x % 2 == 0, nums))
odd_nums = list(filter(lambda x: x % 2 == 1, nums))
print("原数列:", nums)
print("偶数列表:", even_nums)
print("奇数列表:", odd_nums)
输出结果为:
原数列: [1, 2, 3, 4, 5, 6, 7, 8, 9] 偶数列表: [2, 4, 6, 8] 奇数列表: [1, 3, 5, 7, 9]
情况二:根据多个条件过滤列表元素
当需要根据多个条件来过滤列表元素时,可以使用一个自定义函数作为filter的第一个参数。
下面是一个示例,根据年龄、性别、身高和体重过滤人员列表。
# 根据年龄、性别、身高和体重过滤人员列表
people = [
{"name": "Tom", "age": 18, "sex": "Male", "height": 170, "weight": 60},
{"name": "Jerry", "age": 28, "sex": "Male", "height": 180, "weight": 70},
{"name": "Bob", "age": 21, "sex": "Female", "height": 168, "weight": 55},
{"name": "Lucy", "age": 25, "sex": "Female", "height": 160, "weight": 50},
]
def filter_people(item):
return item["age"] > 20 and item["sex"] == "Female" and item["height"] > 165 and item["weight"] < 60
filtered_people = list(filter(filter_people, people))
print("原人员列表:", people)
print("过滤后人员列表:", filtered_people)
输出结果为:
原人员列表: [{'name': 'Tom', 'age': 18, 'sex': 'Male', 'height': 170, 'weight': 60},
{'name': 'Jerry', 'age': 28, 'sex': 'Male', 'height': 180, 'weight': 70},
{'name': 'Bob', 'age': 21, 'sex': 'Female', 'height': 168, 'weight': 55},
{'name': 'Lucy', 'age': 25, 'sex': 'Female', 'height': 160, 'weight': 50}]
过滤后人员列表: [{'name': 'Bob', 'age': 21, 'sex': 'Female', 'height': 168, 'weight': 55}]
在本示例中,自定义函数filter_people接受一个参数item,该参数为列表people中的一项,然后通过与多个条件进行比较,返回一个布尔值,True表示该项应该被保留,False表示该项应该被过滤。在filter函数接受filter_people函数作为参数时,filter函数会遍历people列表中的所有元素,将每个元素作为filter_people函数的参数进行判断,返回值为True的元素会被保留,返回值为False的元素会被过滤。
在使用filter函数时需要注意的一点是,filter函数并不会改变原始数据,而是返回一个新的可迭代对象,如果需要得到一个新的列表,则需要使用list函数进行转换。
