Python - 删除列表中重复次数少于 k 次的元素
引言
在当今飞速发展的世界中,数据是最宝贵的财富之一。数据的力量非常强大,因此出现了许多旨在保护数据的技术。在数据领域,数据处理也扮演着重要的角色,它负责过滤掉不必要的数据,并收集所需的数据以供进一步使用和执行操作。一个常见的问题是从列表中删除重复次数少于特定次数(表示为“k”)的元素。本文旨在为您提供关于上述主题的清晰且内容丰富的解释。
删除列表中重复次数少于 k 次的元素
定义
这里,需要解决的问题是从给定的列表中删除频率少于“k”次的元素。“k”可以是任何数字。因此,假设列表中有“n”个元素,我们需要删除所有出现次数少于“k”次的元素。
算法
步骤 1:首先,创建一个空字典或计数器对象,然后存储每个元素的频率。
步骤 2:每次遍历元素时,更新字典或计数器对象中元素的频率。
步骤 3:使用列表推导式创建一个新列表,仅存储出现次数超过指定“k”次数的元素。
步骤 4:将新列表返回到输出。
步骤 5:完成。
方法
方法 1 - 使用字典和列表推导式。
方法 2 - 使用 collections 模块中的 Counter。
方法 1 - 使用字典和列表推导式。
示例
def remove (original_list, k): element_occurence= {} for element in original_list: if element in element_occurence: element_occurence[element]+=1 else: element_occurence[element]= 1 new_list= [element for element in original_list if element_occurence[element]>=k] return new_list i_list= [1,0,1,1,2,3,2,2,3,3,4,5,4,4,4,5] k_value= 3 result= remove (i_list, k_value) print ("Output list:",result)
输出
Output list: [1, 1, 1, 2, 3, 2, 2, 3, 3, 4, 4, 4, 4]
解释
我们创建一个动态列表,其中包含 n 个元素,这里我们将其命名为 i_list 并为其分配值。
然后我们初始化 k 值,在本例中,我们将其命名为 k_value 并将其初始化为 3。
我们定义一个名为“remove”的函数,它有两个参数,第一个是已创建的 original_list,第二个是 k 值。
在此函数中,我们首先创建一个空字典以计算元素的出现次数。
使用“for”循环迭代输入列表中的每个元素。
在此循环中,检查元素是否已存在于字典中,如果存在,则将其值加 1;否则,将元素添加到字典中并将值设置为 1。
遍历完所有元素后,我们现在在名为“element_occurence”的字典中获得了每个元素的出现次数。
现在,我们使用列表推导式创建一个名为 new_list 的新列表,并仅包含出现次数大于或等于“k”值的元素。
然后返回此 new_list,最后打印输出列表。
在输出列表中,我们只有那些在 original_list 中频率至少为 3 次的元素。所有其他频率小于 3 次的元素都已从列表中删除。
方法 2:使用 collections 模块中的 Counter
示例
from collections import Counter def remove(original_list,k): element_counter= Counter(original_list) new_list= [element for element in original_list if element_counter[element] >=k] return new_list i_list= [8,8,6,6,8,8,4,6,4,4,33,33,1,2,1,2,2,0] k_value= 3 result= remove(i_list,k_value) print ("Output list:",result)
输出
Output list: [8, 8, 6, 6, 8, 8, 4, 6, 4, 4, 2, 2, 2]
解释
首先,我们创建一个动态列表并在其中插入一些重复的元素,以便我们可以清楚地看到输入列表和输出列表之间的差异。
我们将“k”的值初始化为 3。
为了计算列表中每个元素的频率,我们导入来自 collections 模块的 Counter 类。
我们定义一个名为“remove”的函数,它有两个参数。第一个参数用于 original_list,第二个参数用于 k 值。
为了计算元素的出现次数,我们创建一个名为“element_counter”的计数器对象。这里我们将 original_list 作为参数传递,以便它可以自动计算每个元素的频率。
现在,我们使用列表推导式创建一个名为“new_list”的新列表,我们将仅获取出现次数等于或大于“k”值的元素,方法是迭代并检查名为“element_counter”的计数器对象中每个元素的频率。
最后,此 new_list 将返回到结果,我们打印输出列表。
输出列表包含在输入列表中至少出现 3 次的元素。并且出现次数少于指定“k”值的元素已从列表中删除。
使用来自 collections 模块的 Counter 类简化了计数过程,使代码简洁易读。
结论
在数据分析中,一个常见的预处理操作是从列表中删除出现次数少于 k 次的元素。在这篇文章中,我们探讨了问题陈述、代码的语法和解释、一个简单的五步方法以及两种带可执行代码示例和输出的技术。
我们可以通过使用字典或来自 collections 模块的 Counter 类来有效地计算列表中元素的出现次数。我们使用获得的频率信息生成一个新列表,该列表仅包含频率大于或等于设置的最小值 k 的元素。
无论您选择第一种方法(使用字典)还是第二种方法(使用 Counter 类),这两种方法都能有效地从给定列表中删除出现次数少于 k 次的元素,从而为将来的分析提供更干净、更准确的数据。