如何正确过滤列表以从数据中获得更多收益
在Python中,存储顺序或有序数据的最常用的方式之一是使用列表。列表在Python中是一种有序、可变的内置数据结构,用于存储一组数据。列表中存储的项目从零开始索引,用户可以在创建列表后更改列表的内容。
列表中的项目索引允许在列表中存储重复的项目。Python中的列表还可以包含不同数据类型的元素。列表中的项目使用逗号分隔,并在square括号中包围。
以下是Python中列表的示例:
# 一个包含一个数据类型 - 字符串的列表
colors = ['红色', '橙色', '黄色', '绿色', '蓝色', '靛色', '紫罗兰色']
# 一个包含多个数据类型的列表
movies = ['变形金刚', 2012, '复仇者联盟', 300]
# 一个包含重复值的列表
users = ['约翰', '玛丽', '伊丽莎白', '约翰']
列表是一种非常灵活的数据结构,您可以对存储在列表中的数据执行许多操作。列表上执行的一个常见且有用的操作是过滤列表中存储的数据。
过滤列表的重要性
过滤列表意味着提取满足给定条件的特定数据子集。例如,我们可能只对包含数字1到10的列表中的偶数感兴趣。要从列表中提取这样的数据,我们只需要过滤列表以获取可以被2整除的数字。
过滤在数据操作和数据分析中特别有用,因为它允许从列表中删除不需要的项,创建包含满足给定条件的项的新列表,并提取满足特定条件的数据。
过滤列表的一些现实应用包括:
- 数据验证 – 在使用列表时,您可能只想处理符合特定条件的数据。例如,在用户列表中,您可能只对具有名字和姓氏的用户感兴趣。过滤可以在处理数据之前验证和验证列表中的数据。这样,您避免了使用不符合要求的数据。
- 数据清理 – 由于列表可以存储各种数据类型,因此经常会发现列表中包含您不感兴趣的不需要的数据。例如,在包含名称的列表中,您可能不感兴趣列表中的数值。通过过滤,您可以删除不需要的数据。
- 数据分析 – 过滤数据在数据分析中特别有用,因为它使您能够专注于数据的特定子集,从而使您能够轻松识别模式和趋势。例如,在学生列表中,您可以过滤出男性和女性学生,并在数据分析中使用结果。您甚至可以根据年龄、位置和年级进行过滤。这使您能够从列表中的特定子集中得出更有用的结论
过滤列表是一个非常有用的函数,它使您可以控制存储在列表中的数据,从而只能处理您感兴趣的数据。
针对存储在列表中的特定数据子集非常有用,因为它使数据处理和数据分析的过程更好、更快、更准确。
使用filter()函数
filter()函数是Python的内置函数,可以用于迭代遍历可迭代对象,如列表、元组、集合或字典,并提取满足给定条件的可迭代对象中的项。
Python中的可迭代对象是一种可以逐个遍历其元素的对象。通过迭代遍历可迭代对象,按顺序逐个返回可迭代对象中的项。
filter函数的语法如下:
filter(function, iterable)
function – 包含筛选条件的Python函数
iterable – 将要被筛选的可迭代对象。在本例中,我们将使用一个列表。
filter()函数将传入的函数应用于传入的可迭代对象中的每个项目,根据筛选条件测试项目。如果项目满足条件,即返回布尔值true,则会被filter()函数选中。如果不满足条件,则项目不被选中。
filter()函数返回一个通过筛选条件的项目的可迭代对象。您可以使用list()函数创建一个包含通过筛选条件的项目的新列表。
为了看到filter()函数的实际效果,考虑下面的列表,它正在被筛选以选择小于50的数字:
#数字列表
numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61]
#包含筛选条件的函数
def is_even(num):
if num < 50:
return True
else:
return False
#使用list()函数从可迭代对象返回的可迭代对象创建一个列表
filtered_numbers = list(filter(is_even, numbers))
print(filtered_numbers)
上面的代码打印出以下结果:
[15, 46, 24, 37]
使用for循环
在Python中,for循环是一种控制流语句,用于迭代遍历顺序数据结构,如列表、元组、字符串和数组。for循环重复执行一段代码,对于序列中的每个项目都会执行一次。
for循环的一般语法如下:
for item in iterable:
#对于迭代中的每个项目执行的代码块
item – 代表循环迭代中当前要处理的项目的变量
iterable – 循环迭代的序列。在本例中,是一个列表
要使用for循环筛选列表,我们需要在要执行的代码块部分中传入我们的筛选条件。这样,每个项目都会被评估,以确定它是否满足给定的条件。
在使用for循环筛选列表时,还需要创建一个空列表,用于附加通过筛选条件的值。
为了看到这一点,请让我们使用for循环筛选列表中小于50的数字:
numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61]
filtered_numbers = []
for num in numbers:
if num < 50:
# append()用于将满足条件的数字添加到filtered_numbers中。
filtered_numbers.append(num)
print(filtered_numbers)
上面的代码打印出以下结果:
[15, 46, 24, 37]
使用另一个列表
您可以通过检查要筛选的列表中的项目是否出现在另一个列表中,来使用另一个列表筛选列表。例如,请考虑以下两个列表
letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']
vowels = ['a', 'e', 'i', 'o', 'u']
在上面的letters列表中,我们可以通过检查该项是否出现在vowels列表中,确定列表中的哪些项不是元音字母。如果一个项不在vowels列表中出现,那么它就不是元音字母。
这样,我们就可以得到letters中不是元音字母的所有字符。要做到这一点,执行以下代码:
letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']
vowels = ['a', 'e', 'i', 'o', 'u']
not_vowel = []
for letter in letters:
if letter not in vowels:
not_vowel.append(letter)
print(not_vowel)
以上代码打印出以下输出,其中包含不是元音字母的在letters
中的字符。
['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']
使用列表推导
在Python中,列表推导提供了一种更简洁、更简洁、更干净的语法,用于从现有列表创建一个新列表。列表推导具有减少使用for loop将另一个列表中的元素创建一个新列表的多行代码的能力,将其缩减为一行。
这是因为在使用列表推导时,您可以在一行中定义并添加项目到新列表中。
列表推导的语法如下:
new_list = [expression for element in iterable if condition]
new_list – 包含列表推导添加的元素的新列表
expression – 将应用于可迭代对象的每个项的操作
item – 表示可迭代对象中当前活动项的变量名称
iterable – 将从其中选择项目的可迭代对象。
if condition – 可选部分,可以添加条件来筛选项目,仅将满足给定条件的项目添加到正在创建的新列表中。
为了看到列表推导的实际效果以及它在过滤和创建新列表的过程中能够简化多少,我们将使用letters和vowels列表来过滤不在vowels列表中的letters列表中的项。要执行此操作,请执行以下代码:
letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n']
vowels = ['a', 'e', 'i', 'o', 'u']
# 列表推导
not_vowel = [letter for letter in letters if letter not in vowels]
print(not_vowel)
以上代码的输出如下所示:
['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']
输出与先前的示例相似,该示例使用for循环使用另一个列表过滤列表。然而,它使用更少的代码行来实现相同的结果。
结论
在使用Python处理数据时,您经常要执行的一个常见操作是从可迭代对象(如列表)中过滤数据。这是数据分析和数据处理中非常有用的一步,因为它使您只能使用与操作或处理相关的数据。
在Python中,一个非常流行的顺序数据结构是列表。如果您发现自己使用列表并且需要对其进行过滤,请考虑使用本文中介绍的任何方法。
您还可以阅读有关如何使用lambda functions in Python的示例。