本文目录导读:

在Python中实现列表去重有多种方法,下面我来介绍几种常见且实用的方式:
使用set(最简单,但会打乱顺序)
# 原始列表 my_list = [1, 2, 2, 3, 4, 4, 5, 1, 6] # 使用set去重 unique_list = list(set(my_list)) print(unique_list) # 输出: [1, 2, 3, 4, 5, 6](顺序可能不同)
保持原顺序的去重方法
使用for循环和辅助列表
def remove_duplicates_keep_order(items):
unique_list = []
for item in items:
if item not in unique_list:
unique_list.append(item)
return unique_list
my_list = [1, 2, 2, 3, 4, 4, 5, 1, 6]
result = remove_duplicates_keep_order(my_list)
print(result) # 输出: [1, 2, 3, 4, 5, 6]
使用字典(Python 3.7+ 保持插入顺序)
my_list = [1, 2, 2, 3, 4, 4, 5, 1, 6] unique_list = list(dict.fromkeys(my_list)) print(unique_list) # 输出: [1, 2, 3, 4, 5, 6]
处理复杂数据类型
列表中有字典的情况
# 包含字典的列表
data = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 30},
{'name': 'Alice', 'age': 25},
{'name': 'Charlie', 'age': 35}
]
# 方法1: 使用JSON序列化(简单但有限制)
import json
unique_data = list({json.dumps(d, sort_keys=True): d for d in data}.values())
print(unique_data)
# 方法2: 自定义去重函数
def remove_duplicate_dicts(data_list):
seen = set()
result = []
for d in data_list:
# 将字典转换为可哈希的元组
dict_tuple = tuple(sorted(d.items()))
if dict_tuple not in seen:
seen.add(dict_tuple)
result.append(d)
return result
unique_data = remove_duplicate_dicts(data)
print(unique_data)
针对特定场景的方法
字符串列表去重(忽略大小写)
fruits = ['Apple', 'apple', 'Banana', 'banana', 'Cherry']
# 不区分大小写去重
unique_fruits = list({fruit.lower(): fruit for fruit in fruits}.values())
print(unique_fruits) # 输出: ['apple', 'banana', 'Cherry']
基于某个属性去重(对象列表)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person({self.name}, {self.age})"
people = [
Person('Alice', 25),
Person('Bob', 30),
Person('Alice', 25),
Person('Charlie', 35)
]
# 基于name属性去重
seen_names = set()
unique_people = []
for person in people:
if person.name not in seen_names:
seen_names.add(person.name)
unique_people.append(person)
print(unique_people) # 输出: [Person(Alice, 25), Person(Bob, 30), Person(Charlie, 35)]
使用第三方库(pandas)
# 需要安装pandas: pip install pandas import pandas as pd my_list = [1, 2, 2, 3, 4, 4, 5, 1, 6] unique_list = pd.Series(my_list).drop_duplicates().tolist() print(unique_list) # 输出: [1, 2, 3, 4, 5, 6]
性能对比
import time
import random
# 生成测试数据
test_list = [random.randint(1, 1000) for _ in range(10000)]
# 测试不同方法
start = time.time()
list(set(test_list))
print(f"set方法: {time.time() - start:.4f}秒")
start = time.time()
list(dict.fromkeys(test_list))
print(f"dict方法: {time.time() - start:.4f}秒")
start = time.time()
result = []
for item in test_list:
if item not in result:
result.append(item)
print(f"for循环方法: {time.time() - start:.4f}秒")
推荐使用场景
- 数据量大且不关心顺序:使用
set() - 需要保持顺序:使用
dict.fromkeys()或手动循环 - 处理复杂数据结构:根据具体需求自定义去重逻辑
- 数据分析场景:考虑使用pandas
选择哪种方法取决于你的具体需求:是否需要保持顺序、数据类型是否简单、性能要求如何等因素。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播