当前位置:首页 > Python > 正文

Python列表去重5种方法详解 | 代码示例与性能对比

Python列表去重:5种高效方法详解

在Python编程中,列表去重是常见的数据处理需求。本文将详细讲解5种不同的列表去重方法,包括基础用法、顺序保留技巧和性能对比,并提供可直接运行的代码示例。

方法1:使用set转换(最快但无序)

# 利用set自动去重的特性
original_list = [3, 5, 2, 3, 8, 5]
unique_list = list(set(original_list))

print(unique_list)  # 输出结果顺序随机,如[8, 2, 3, 5]

⚠️ 注意:此方法会改变原始顺序,适用于不关心顺序的场景

方法2:字典键值去重(保留顺序)

# 利用字典键的唯一性保留顺序
original_list = ['apple', 'banana', 'apple', 'orange', 'banana']
unique_list = list(dict.fromkeys(original_list))

print(unique_list)  # 输出: ['apple', 'banana', 'orange']

方法3:列表推导式(保留顺序)

# 通过判断新列表是否已包含当前元素
original_list = [10, 20, 30, 20, 10]
unique_list = []
[unique_list.append(x) for x in original_list if x not in unique_list]

print(unique_list)  # 输出: [10, 20, 30]

⚠️ 注意:小列表效率尚可,大列表性能较差

方法4:使用OrderedDict(保留顺序)

# 适用于Python 3.6以下版本保留顺序
from collections import OrderedDict
original_list = ['a', 'b', 'c', 'b', 'a']
unique_list = list(OrderedDict.fromkeys(original_list))

print(unique_list)  # 输出: ['a', 'b', 'c']

方法5:使用pandas(大数据处理)

# 适合处理大型数据集
import pandas as pd
original_list = [1.1, 2.2, 1.1, 3.3, 2.2]
s = pd.Series(original_list)
unique_list = s.drop_duplicates().tolist()

print(unique_list)  # 输出: [1.1, 2.2, 3.3]

性能对比总结

方法 顺序保留 时间复杂度 适用场景
set转换 O(n) 小型列表/不关心顺序
字典键值 O(n) 推荐方法(Python 3.6+)
列表推导式 O(n²) 小型列表

常见问题解答

Q:哪种方法最适合保留顺序?

A:推荐使用dict.fromkeys()方法(Python 3.6+)

Q:处理百万级数据应该用什么方法?

A:优先考虑set转换(如果不需要顺序)或pandas的drop_duplicates()

Q:如何同时去重并保持元素类型?

A:所有方法都自动保持原始元素类型,注意嵌套列表需特殊处理

发表评论