Python 程序删除重复数字
在本文中,我们将学习如何在 Python 中删除重复数字。
使用的方法
以下是完成此任务的各种方法 -
使用列表推导和 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() 函数将此数字字符串转换为集合,该函数会删除数字的重复数字。
检查字符串(数字)的长度是否等于上述集合的长度。
从输入列表中删除重复数字的元素后打印结果列表。
示例
以下程序使用列表推导和 set() 函数从输入列表中删除包含重复数字的数字后返回结果列表 –
# 输入列表 inputList = [3352, 8135, 661, 7893, 99] # 打印输入列表 print("输入列表: ", inputList) # 使用列表推导遍历列表中的数字 # 将数字转换为字符串并查找一组字符串(删除重复项) # 检查集合的长度是否等于数字的数量 resultList = [i for i in inputList if len(set(str(i))) == len(str(i))] # 打印删除重复数字元素后的结果列表 print("删除重复数字元素后的结果列表:") print(resultList)
输出
执行时,上述程序将生成以下输出 –
输入列表:[3352, 8135, 661, 7893, 99] 删除重复数字元素后的结果列表: [8135, 7893]
时间复杂度 - O(n)
辅助空间 - O(n)
方法 2:使用 re 模块
re.compile() 方法
正则表达式模式可以组合成模式对象,然后可以使用此 re.compile() 方法将其用于模式匹配。该方法还有助于再次搜索模式而无需重写它。
语法
re.compile(pattern, repl, string):
re.search() 函数
搜索整个目标字符串以查找正则表达式模式的出现,并返回找到匹配项的相应匹配对象实例。它仅返回目标字符串中与模式匹配的第一个匹配项。
算法(步骤)
以下是执行所需任务需要遵循的算法/步骤 –
使用 import 关键字导入 re 模块(正则表达式)。
通过提供正则表达式模式来使用 re 模块的 compile() 函数以删除具有重复数字的元素。
遍历列表元素,并使用 search() 函数检查列表元素是否与上述正则表达式模式匹配。
示例
以下程序在使用 re.complie() 和 re.search() 函数从输入列表中删除包含重复数字的数字后返回结果列表 –
# 导入 re 模块 import re # 输入列表 inputList = [3352, 8135, 661, 7893, 99] # 打印输入列表 print("输入列表: ", inputList) # 正则表达式模式删除包含重复数字的元素 regexPattern = re.compile(r"(\d).*\1") # 检查列表元素上述正则表达式模式匹配 resultList = [i for i in inputList if not regexPattern.search(str(i))] # 打印删除重复数字元素后的结果列表 print("删除重复数字元素后的结果列表:") print(resultList)
输出
执行时,上述程序将生成以下输出 –
输入列表:[3352, 8135, 661, 7893, 99] 删除重复数字元素后的结果列表: [8135, 7893]
时间复杂度 − O(n)
辅助空间 − O(n)
方法 3:使用 Counter()函数
Counter() 函数(计数可哈希对象的子类。它在调用时隐式创建可迭代对象的哈希表)。
示例
以下程序在使用 Counter() 函数从输入列表中删除包含重复数字的数字后返回结果列表 –
# 从 collections 模块导入 Counter 函数 from collections import Counter # 输入列表 inputList = [3352, 8135, 661, 7893, 99] # 打印输入列表 print("输入列表: ", inputList) # Counter 给出数字的唯一键(数字) resultList = [i for i in inputList if len(Counter(str(i))) == len(str(i))] # 打印删除重复数字元素后的结果列表 print("删除重复数字元素后的结果列表:") print(resultList)
输出
执行时,上述程序将生成以下输出 –
输入列表:[3352, 8135, 661, 7893, 99] 删除重复数字元素后的结果列表: [8135, 7893]
时间复杂度 - O(n)
辅助空间 - O(n)
此处的 Counter() 方法给出了数字每位数字的频率。因此,它具有给定数字的唯一键(数字)。然后将给定数字的长度与计数器返回的唯一数字的数量进行比较
结论
在本文中,我们学习了 3 种从列表中删除具有重复数字的整数的不同方法。此外,我们还学习了如何使用 regex 模块在可迭代对象中查找模式匹配。