Python列表去重的5种高效方法 | 完整教程
这是文章《用Python从列表中删除重复项》的第1部分(共1部分)。
内容片段: 从Python List中删除重复项有很多方法。
- 使用临时列表和循环
- 使用set()内置方法
- 使用字典键
- 列表count()函数
- 列表推导式
从列表中删除重复项
Python列表可以包含重复元素。让我们看一下不同方式中如何删除重复元素的示例。
使用临时列表
这是从列表中删除重复元素的蛮力方式。我们将创建一个临时列表,只有在元素不存在时才将其添加。
ints_list = [1, 2, 3, 4, 3, 2]
temp = []
for x in ints_list:
if x not in temp:
temp.append(x)
ints_list = temp
print(f'Updated List after removing duplicates = {temp}')
输出:去除重复项后的更新列表为[1, 2, 3, 4] 推荐阅读:Python的f-strings。
2. set() 函数
在Python中,set没有重复元素。我们可以使用内置的set()函数将列表转换为set,然后使用list()函数将其转换回列表。
ints_list = [1, 2, 3, 4, 3, 2]
ints_list1 = list(set(ints_list))
print(ints_list1) # [1, 2, 3, 4]
3. 将列表元素作为字典的键
我们知道字典键是唯一的。字典类有一个fromkeys()函数,它接受一个可迭代对象,用该可迭代对象的键创建字典。
ints_list = [1, 2, 3, 4, 3, 2]
ints_list2 = list(dict.fromkeys(ints_list))
print(ints_list2) # [1, 2, 3, 4]
4. 不推荐使用列表count()函数。
列表的count()方法返回值的出现次数。我们可以与remove()方法一起使用它来从列表中消除重复元素。
ints_list = [1, 2, 3, 4, 3, 2]
for x in ints_list:
if ints_list.count(x) > 1:
ints_list.remove(x)
print(ints_list) # [1, 2, 3, 4]
请注意,不建议在从同一迭代器中删除元素时使用count()函数,因为这可能导致不希望的结果。例如:
values = [87, 94, 45, 94, 94, 41, 65, 94, 41, 99, 94, 94, 94]
for x in values:
if values.count(x) > 1:
values.remove(x)
print(values) # [87, 45, 65, 41, 99, 94, 94] - 94仍然出现了两次
5. 列表推导式
我们可以使用列表推导式从可迭代对象中创建一个列表。这种技术与使用临时列表和for循环来删除重复元素的方法相同,但能减少代码的行数。
ints_list = [1, 2, 3, 4, 3, 2]
temp = []
[temp.append(x) for x in ints_list if x not in temp]
print(temp) # [1, 2, 3, 4]
从列表中删除重复项的最佳方法是什么?
如果您不想要重复元素,您应该使用Set。但是,如果您必须从列表中删除重复值,那么我推荐使用dict.fromkeys()方法,因为它既不会创建另一个临时的集合对象,也不会像count()函数那样可能导致意外的结果。所以它既节省内存又可靠。