如何在 Python 中查找列表中的重复数据
本教程将介绍如何在 Python 中查找列表中的重复内容。
使用 set()
函数删除 Python 列表中的重复内容
Python set()
是一个将列表转换为集合的函数。根据对集合和列表的描述,将一个列表转换为集合意味着删除列表中所有重复的元素。
然而,我们想要的是搜索列表中重复项。要做到这一点,我们仍然使用 set()
函数,但我们只包括那些在列表中拥有多个元素的元素,这意味着它们是有重复的元素。
- 声明一个函数,在一个列表中寻找重复的元素,并将它们存储为一个集合。
def listToSet(listNums):
set([num for num in listNums if listNums.count(x) > 1])
- 另一种方法,如果你想把结果保留为一个列表而不是一个集合,则使用
set()
和add()
在列表中寻找重复的元素,并在返回时重新将其转换为一个列表。
def list_duplicates(listNums):
once = set()
seenOnce = once.add
twice = set(num for num in listNums if num in once or seenOnce(x))
return list(twice)
如果这个数字是第一次出现,并且在集合 once
内不存在,那么这个函数就会把元素添加到 once
中。
两个函数将返回相同的输出,尽管一个是集合,另一个是列表。结果将输出 listNums
中所有重复的元素。
[1, 3, 5, 8]
使用 iteration_utils
模块来查找 Python 列表中的重复项
iteration_utils
有两个函数可以在预定义函数中搜索重复的内容:duplicates
和 unique_everseen
。
我们将使用上面相同的列表定义 listNums
。
从 iteration_utils
中导入 duplicates
,并使用它来返回 listNums
内所有重复的列表。
from iteration_utils import duplicates
listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]
def listDups(listNums):
return list(duplicates(listNums))
上述函数的输出将返回一个包含 listNums
内所有重复元素的列表。
[1, 1, 3, 3, 5, 5, 5, 5, 8, 8]
虽然,这个列表还包括重复元素的迭代。这意味着它将返回重复元素的每个实例。
这就是 unique_everseen
的作用。这个函数对列表进行处理,删除 duplicates()
返回的所有重复的实例。
from iteration_utils import duplicates
from iteration_utils import unique_everseen
listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]
def listDupsUnique(listNums):
return list(unique_everseen(duplicates(listNums)))
然后这个函数将返回以下结果。
[1, 3, 5, 8]
总而言之,在 Python 中,有两种简单的解决方案来查找列表中的重复实例。第一种是使用 set()
和其他 Python 中集合的实用函数来查找重复的内容,并将它们存储在另一个变量中。另一种是通过 iteration_utils
模块,使用 duplicates
和 unique_everseen
,这或多或少地做了同样的事情,产生了同样的输出。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn