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 次的元素,从而为将来的分析提供更干净、更准确的数据。

更新于: 2023年10月9日

112 次查看

开启您的 职业生涯

完成课程获得认证

开始学习
广告