Python程序 移除重复数字

Python程序 移除重复数字

在这篇文章中,我们将学习如何在Python中删除重复的数字。

使用的方法

以下是完成这项任务的各种方法

  • 使用list comprehension和set()函数

  • 使用re模块

  • 使用Counter()函数

例子

假设我们已经取得了一个包含数字的 输入列表 。现在我们将从列表中删除所有包含重复数字的数字,并使用上述方法返回结果列表。

输入

inputList = [3352, 8135, 661, 7893, 99]

输出

[8135, 7893]

在上面的输入列表中,在第一元素 3352 3重复了两次。因此它被删除。但是 8135 没有重复的数字,因此它被保留。同样,661和99也被删除,因为它们含有重复的字符。

因此,输出的列表只包含8135, 7893个元素。

方法1:使用列表理解和set()函数

len() – 一个对象中的项目数由 len() 方法返回。当对象是一个字符串时,len()函数返回字符串中的字符数。

set() 函数(创建一个集合对象。一个集合列表将以随机的顺序出现,因为项目是没有顺序的。它删除了所有重复的内容)

算法(步骤)

以下是执行所需任务时需要遵循的算法/步骤–。

  • 创建一个变量来存储 输入列表 并打印给定的列表。

  • 使用列表理解法遍历给定列表中的数字(元素)。

  • 使用str()函数将每个数字转换为字符串(返回对象的字符串格式,即转换为字符串)。

  • 使用set()函数将这个数字字符串转换为集合,删除数字中的重复数。

  • 检查字符串(数字)的长度是否等于上述集合的长度。

  • 打印从输入列表中去除重复数字的元素后的结果列表。

例子

# input list
inputList = [3352, 8135, 661, 7893, 99]

# printing the input list
print("Input list: ", inputList)

# Traversing through the numbers of the list using list comprehension

# Convering numbers to string and finding a set of strings (removes duplicates)

# Checking if the length of the set is equal to the number of digits
resultList = [i for i in inputList if len(set(str(i))) == len(str(i))]

# printing resultant list after removing elements with repeating digits
print("Resultant list after removing elements with repeating digits:")
print(resultList)

输出

在执行过程中,上述程序将产生以下输出

Input list: [3352, 8135, 661, 7893, 99]
Resultant list after removing elements with repeating digits:
[8135, 7893]

时间复杂度 – O(n )

辅助空间 – O(n )

方法2:使用re模块

re.compile()方法

一个正则表达式模式可以被组合成模式对象,然后可以使用这个re.compile()方法进行模式匹配。该方法还可以帮助再次搜索一个模式,而不需要重写它。

语法

re.compile(pattern, repl, string):

re.search()函数

在整个目标字符串中搜索regex模式的出现,并返回找到匹配的适当的Match对象实例。它只返回目标字符串中与该模式的第一个匹配。

算法(步骤)

以下是执行所需任务的算法/步骤。

  • 使用import关键字来导入 re 模块(regex)。
  • 使用re模块的 compile() 函数,给出regex模式,删除有重复数字的元素。
  • 遍历列表中的元素,使用search()函数检查列表中的元素是否与上述regex模式相匹配。

例子

下面的程序在使用re.complie()和re.search()函数从输入列表中删除含有重复数字的数字后,返回结果列表。

# importing re module
import re

# input list
inputList = [3352, 8135, 661, 7893, 99]

# printing the input list
print("Input list: ", inputList)

# regex pattern to remove elements with repeating digits
regexPattern = re.compile(r"(\d).*\1")

# Checking list elements for the above regex pattern matches
resultList = [i for i in inputList if not regexPattern.search(str(i))]

# printing resultant list after removing elements with repeating digits
print("Resultant list after removing elements with repeating digits:")
print(resultList)

输出

在执行过程中,上述程序将产生以下输出

Input list: [3352, 8135, 661, 7893, 99]
Resultant list after removing elements with repeating digits:
[8135, 7893]

时间复杂度 – O(n )

辅助空间 – O(n)

方法3:使用Counter()函数

Counter() 函数(一个对可散列对象进行计数的子类。它在被调用/调用时隐含地创建了一个可迭代的哈希表)。

例子

下面的程序在使用Counter()函数从输入列表中删除含有重复数字的数字后,返回结果列表

# importing a Counter function from the collections module
from collections import Counter

# input list
inputList = [3352, 8135, 661, 7893, 99]

# printing the input list
print("Input list: ", inputList)

# Counter gives the unique keys(digits) of the number
resultList = [i for i in inputList if len(Counter(str(i))) == len(str(i))]

# printing resultant list after removing elements with repeating digits
print("Resultant list after removing elements with repeating digits:")
print(resultList)

输出

在执行过程中,上述程序将产生以下输出

Input list: [3352, 8135, 661, 7893, 99]
Resultant list after removing elements with repeating digits:
[8135, 7893]

时间复杂度 – O(n )

辅助空间 – O(n)

数字的每个数字的频率是由这里的Counter()方法给出的。因此,它有给定数字的唯一键(数字)。然后将给定数字的长度与计数器返回的唯一数字的数量进行比较

总结

在这篇文章中,我们学习了3种不同的方法来从列表中移除有重复数字的整数。此外,我们还学习了如何使用regex模块在迭代表中寻找模式匹配。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程