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()函数,返回从输入列表中移除包含重复数字的数字后的结果列表:

# 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()函数

搜索整个目标字符串中正则表达式模式的出现,并在找到匹配项的位置返回相应的Match Object实例。它只返回目标字符串中与模式的第一个匹配项。

算法(步骤)

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

  • 使用import关键字导入**re**模块(正则表达式)。

  • 通过提供正则表达式模式来移除包含重复数字的元素,使用re模块的**compile()**函数。

  • 遍历列表的元素,并使用search()函数检查列表元素是否与上述正则表达式模式匹配。

示例

下面的程序使用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()方法给出了数字中每个数字的频率。因此,它具有给定数字的唯一键(数字)。然后将给定数字的长度与计数器返回的唯一数字数量进行比较。

结论

在这篇文章中,我们学习了三种不同的方法来从列表中移除包含重复数字的整数。此外,我们还学习了如何使用正则表达式模块在可迭代对象中查找模式匹配。

更新于:2023年1月27日

788 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告