原文: Python Unique List – How to Get all the Unique Values in a List or Array
假设你有一个包含重复数字的列表:
numbers = [1, 1, 2, 3, 3, 4]
但是你想要一个没有重复数字的列表:
unique_numbers = [1, 2, 3, 4]
有几种方法可以在 Python 中获取唯一值列表。本文将向你展示如何操作。
方法 1 – 使用集合获取唯一元素
使用 set
集合的方式去做。集合很有用,因为它包含独特的元素。
你可以使用集合来获取唯一元素。然后,将集合变成列表。
让我们看一下使用集合和列表的两种方法。第一种方法很冗长,但了解每一步发生的情况很有用。
numbers = [1, 2, 2, 3, 3, 4, 5]
def get_unique_numbers(numbers):
list_of_unique_numbers = []
unique_numbers = set(numbers)
for number in unique_numbers:
list_of_unique_numbers.append(number)
return list_of_unique_numbers
print(get_unique_numbers(numbers))
# result: [1, 2, 3, 4, 5]
让我们仔细看看发生了什么。我得到了一个数字列表,numbers
。我将此列表传递给函数 get_unique_numbers
。
在函数内部,我创建了一个空列表,最终将保存所有唯一数字。然后,我使用一个 set
从 numbers
列表中获取唯一数字。
unique_numbers = set(numbers)
我有了我需要的东西:唯一的数字。现在我需要将这些值放入一个列表中。为此,我使用 for
循环遍历集合中的每个数字。
for number in unique_numbers:
list_of_unique_numbers.append(number)
在每次迭代中,我将当前数字添加到列表 list_of_unique_numbers
中。最后,我在程序结束时返回这个列表。
在 Python 中有一种更简单的方法来使用集合和列表来获取唯一值。这就是我们接下来要解决的问题。
使用 Set 的更短的方法
在 Python 的内置函数的帮助下,上面示例中编写的所有代码都可以被压缩为一行。
numbers = [1, 2, 2, 3, 3, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)
# Result: [1, 2, 3, 4, 5]
虽然这段代码看起来和第一个例子很不一样,但想法是一样的。使用一个集合来获取唯一的数字。然后,将集合变成列表。
unique_numbers = list(set(numbers))
阅读上述代码时,“由内而外”地思考是有帮助的。首先评估最里面的代码:set(numbers)
。然后,评估最外面的代码:list(set(numbers))
。
方法 2 – 使用迭代来识别唯一值
迭代是另一种可以考虑的方法。
主要思想是创建一个空列表用来存放唯一值。然后,使用 for
循环遍历给定列表中的每个数字。如果该数字已经是在唯一值的列表中,则继续进行下一次迭代。否则,将数字添加到列表中。
让我们看看两种使用迭代来获取列表中唯一值的方法,从更详细的一种开始。
numbers = [20, 20, 30, 30, 40]
def get_unique_numbers(numbers):
unique = []
for number in numbers:
if number in unique:
continue
else:
unique.append(number)
return unique
print(get_unique_numbers(numbers))
# Result: [20, 30, 40]
这是每一步发生的事情。首先,我得到一个数字列表,numbers
。我将此列表传递给我的函数 get_unique_numbers
。
在函数内部,我创建了一个空列表 unique
。最终,此列表将包含所有唯一值。
我使用 for
循环遍历 numbers
列表中的每个数字。
for number in numbers:
if number in unique:
continue
else:
unique.append(number)
循环内的条件检查当前迭代的数字是否在 unique
列表中。如果是,则循环继续到下一次迭代。否则,该数字将添加到此列表中。
这是重要的一点:只添加唯一的数字。循环完成后,我返回包含所有唯一数字的 unique
列表。
一种更短的迭代方法
还有另一种方法可以用更少的行编写函数。
numbers = [20, 20, 30, 30, 40]
def get_unique_numbers(numbers):
unique = []
for number in numbers:
if number not in unique:
unique.append(number)
return unique
#Result: [20, 30, 40]
区别在于条件。这次它被设置成这样:如果数字不在 unique
中,则添加它。
if number not in unique:
unique.append(number)
否则,循环将移动到列表 numbers
中的下一个数字。
结果是一样的。然而,当布尔值被否定时,有时会更难思考和阅读代码。
还有其他方法可以在 Python 列表中查找唯一值。但是你可能会发现自己正在使用本文中介绍的方法之一。
我在 amymhaddad.com 上写了关于学习编程的文章。欢迎在 Twitter 上关注我:@amymhaddad。