Python 列表 删除重复: 解释和例子
在这篇文章中,我们将讨论与 Python list remove duplicates 相关的六个主题,下面将逐一讨论。
- 定义删除列表中所有重复数据的函数
- 在嵌套列表中
- 如何在随机化列表时移除重复序列
- 在移除重复数据时保持顺序
- 删除重复数据并排序
- 删除两个列表中的重复数据
每个主题都有简短的解释和示例。
1. 定义一个函数来删除列表中的所有重复数据
要删除 Python list 中的所有重复项,我们可以使用 set()
函数。
Python 的缺省数据类型,set,是一个特殊的数据类型,它不允许包含重复的项。
如果您有兴趣了解更多,请查看 Lists vs Tuples vs Dictionaries vs Sets。
set()
函数将一个可迭代的对象,例如一个列表,转换为一个集合,并自动删除重复的对象。
你可以使用它来编写一个函数,删除列表中的所有重复数据,如下所示
让我们看看示例代码
def remove_duplicates(lst):
return list(set(lst))
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
print(result)
# Output
[1, 2, 3, 4]
上面的代码使用set()
删除重复的数据,然后使用list()
将它们转换回列表并返回。
在这种情况下需要注意的是,现有列表的顺序是不保证的。 因为 Python 集合是一种无序的数据类型,所以当转换回 list 时,有可能不保留原来的顺序。
如果你想在删除列表中的重复数据时保留顺序,请参见 第 4 节。
2. 删除嵌套列表中的重复数据
在 Python 中移除嵌套 list 中的重复是有点不同的。
你不能使用 set()
来删除嵌套列表中的重复数据,所以你需要使用一个循环来删除重复数据。
下面是一个从嵌套列表中删除重复的函数的示例代码:
def remove_duplicates_nested(lst):
result = []
for sublist in lst:
if sublist not in result:
result.append(sublist)
return result
my_list = [[1, 2, 3], [3, 4, 5], [1, 2, 3], [6, 7, 8]]
result = remove_duplicates_nested(my_list)
print(result)
# Output
[[1, 2, 3], [3, 4, 5], [6, 7, 8]]
上面的代码创建了一个空列表result
,并遍历双列表lst
,检查每个子列表是否已经存在于result
中。
只有当它不存在于result
中时,才会被添加到result
中。
这将删除重复的子列表,并最终返回一个唯一的结果。
3. 如何在随机化列表时删除重复项
通过下面的步骤,你可以从Python列表中随机抽取项,同时删除重复项。
- 创建一个删除了重复项的新列表。
- 从新列表中随机提取项。
下面是一些实现这个功能的示例代码
import random
def get_random_elements(lst, num_elements):
unique_elements = list(set(lst))
random_elements = random.sample(unique_elements, num_elements)
return random_elements
my_list = [1, 2, 3, 3, 4, 2, 1]
result = get_random_elements(my_list, 3)
print(result)
# Output
[1, 4, 2]
上面的代码使用set()
删除重复内容,然后转换为list()
创建新的列表unique_elements
。
然后我们使用random.sample()
函数从unique_elements
中随机抽取num_elements
个元素生成random_elements
。
然后返回 random_elements
。
random.sample()
函数从列表中随机抽取一定数量的非重复项。
4. 删除重复数据时保持顺序
使用set()
函数的重复数据删除方法会忽略列表的现有顺序。
让我们看看如何避免这种情况,并在重复数据删除时保持顺序。
在 Python 中,你可以使用 collections
模块中的 OrderedDict
类和 list()
来删除列表中的重复数据,同时保留顺序。
下面是一个使用它们的代码示例
from collections import OrderedDict
def remove_duplicates(lst):
return list(OrderedDict.fromkeys(lst))
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
print(result)
# Output
[1, 2, 3, 4]
在上面的代码中,函数 OrderedDict.fromkeys()
用于创建一个去除了重复项的有序字典,然后将其转换回列表。
OrderedDict
是一个类似于字典的类,与字典类似,但保持了项的顺序。
因此,如果使用fromkeys()
方法创建一个删除了重复项的字典,那么在删除重复项后,项的顺序将被保留。
然后我们使用list()
函数将字典转换回列表。
5. 删除重复项并对列表排序
要在 Python 中对列表项进行重复删除和排序,可以执行以下操作
- 创建一个删除了重复项的新列表。
- 对新创建的列表排序。
下面是一些实现这个功能的示例代码。
def remove_duplicates_and_sort(lst):
unique_elements = list(set(lst))
sorted_elements = sorted(unique_elements)
return sorted_elements
my_list = [3, 2, 1, 4, 3, 2, 1]
result = remove_duplicates_and_sort(my_list)
print(result)
# Output
[1, 2, 3, 4]
在上面的代码中,我们使用set()
删除重复的元素,然后转换为list
创建一个新的列表,unique_elements
。
然后我们使用sorted()
函数创建一个sorted_elements
,以升序排列unique_elements
。
然后返回 sorted_elements
。
sorted()
函数返回一个按列表排序的新列表。 更多信息,请参见帖子 Sorting lists。
6. 如何重复两个列表
如何删除两个列表中的重复内容,在帖子Join lists的Section 4
中有所介绍。
请阅读该部分。
结论
在这篇文章中,我试图回答你关于 Python list 删除重复的一些问题。
希望能对你的实际工作有所帮助。
