假设有一个包含重复元素的列表:
fruits = ["苹果", "苹果", "香蕉", "橙子", "橙子", "葡萄"]但想要一个没有重复元素的列表:
unique_fruits = ["苹果", "香蕉", "橙子", "葡萄"]在 Python 中获取唯一值列表有多种方法,本文将为你详细介绍。
集合的特性是元素不可重复,因此非常适合用于去重。我们可以先将列表转换为集合,再将集合转回列表,即可得到去重结果。
下面是两种基于集合的实现方式,第一种较为详细,便于理解每一步的过程:
fruits = ["苹果", "香蕉", "香蕉", "橙子", "橙子", "葡萄", "草莓"]
def get_unique_fruits(fruits):
# 创建空列表,用于存储最终的唯一值
list_of_unique_fruits = []
# 将列表转换为集合,自动去重
unique_fruits = set(fruits)
# 遍历集合,将元素添加到列表中
for fruit in unique_fruits:
list_of_unique_fruits.append(fruit)
return list_of_unique_fruits
print(get_unique_fruits(fruits))
# 输出:['苹果', '香蕉', '橙子', '葡萄', '草莓'](顺序可能不同)步骤解析:
get_unique_fruits,接收一个列表作为参数;list_of_unique_fruits,用于存放去重后的结果;set(fruits) 将列表转换为集合,利用集合的特性自动去除重复元素;借助 Python 的内置函数,上述代码可以简化为一行:
fruits = ["苹果", "香蕉", "香蕉", "橙子", "橙子", "葡萄", "草莓"]
unique_fruits = list(set(fruits))
print(unique_fruits)
# 输出:['苹果', '香蕉', '橙子', '葡萄', '草莓'](顺序可能不同)这种写法的逻辑与上一种完全一致,只是将 “转换为集合” 和 “转回列表” 两步合并。解读时可以从内到外:先执行 set(fruits) 去重,再用 list() 转换为列表。
注意:集合是无序的,因此转换后的列表顺序可能与原列表不同。如果需要保留原列表的元素顺序,这种方法不适用。
另一种思路是手动遍历列表,只保留首次出现的元素。核心逻辑是:
下面是两种基于迭代的实现方式,先从详细版本开始:
fruits = ["西瓜", "西瓜", "桃子", "桃子", "梨"]
def get_unique_fruits(fruits):
unique = [] # 存储唯一值的空列表
for fruit in fruits:
# 若元素已在unique中,跳过当前循环
if fruit in unique:
continue
# 否则添加到unique中
else:
unique.append(fruit)
return unique
print(get_unique_fruits(fruits))
# 输出:['西瓜', '桃子', '梨']步骤解析:
get_unique_fruits,接收列表参数;unique;fruit 已在 unique 中,用 continue 跳过当前迭代;unique 中;unique 中即为去重且保留原顺序的元素。可以简化条件判断,减少代码行数:
fruits = ["西瓜", "西瓜", "桃子", "桃子", "梨"]
def get_unique_fruits(fruits):
unique = []
for fruit in fruits:
# 直接判断元素是否不在unique中,是则添加
if fruit not in unique:
unique.append(fruit)
return unique
print(get_unique_fruits(fruits))
# 输出:['西瓜', '桃子', '梨']这种写法将条件从 “如果存在则跳过” 改为 “如果不存在则添加”,逻辑更直接,且同样保留原列表的元素顺序。