Python 程序删除重复数字

pythonserver side programmingprogramming

在本文中,我们将学习如何在 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 模块在可迭代对象中查找模式匹配。


相关文章