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模块在迭代表中寻找模式匹配。