Artigo original: Python Unique List – How to Get all the Unique Values in a List or Array
Digamos que temos uma lista contendo números duplicados:
numbers = [1, 1, 2, 3, 3, 4]
No entanto, queremos uma lista de números exclusivos.
unique_numbers = [1, 2, 3, 4]
Aqui, veremos algumas maneiras de obter uma lista de valores exclusivos em Python. Este artigo mostrará como fazer isso.
Opção 1 – Usar um set para obter os elementos exclusivos
Usar um set
é uma das maneiras de se fazer isso. Um set é útil, pois ele contém apenas elementos exclusivos.
Você pode usar um set para obter os elementos exclusivos. Depois, é só transformar o set em uma lista.
Vamos agora ver duas maneiras de usar um set e uma lista. A primeira é extensa, mas é útil para vermos o que está acontecendo em cada parte da transição.
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]
Vejamos mais de perto o que está havendo. Eu recebo uma lista de números, numbers
. Então, passo essa lista para a função get_unique_numbers
.
Dentro da função, criarei uma lista vazia, a qual, no fim, terá apenas os números exclusivos. Em seguida, uso um set
para obter os números exclusivos da lista numbers
.
unique_numbers = set(numbers)
Agora, eu tenho o que precisava: os números exclusivos. Só preciso, então, colocar esses números em uma lista. Para fazer isso, uso um laço for para percorrer cada número do set.
for number in unique_numbers:
list_of_unique_numbers.append(number)
Em cada iteração, adiciono o número atual à lista list_of_unique_numbers
. Por fim, retorno essa lista ao final do programa.
Há uma maneira mais curta de usar um set e uma lista para obter os valores exclusivos em Python. É isso que veremos a seguir.
Uma abordagem mais curta com o set
Todo o código escrito no exemplo acima pode ser condensado em uma linha com ajuda das funções integradas do Python.
numbers = [1, 2, 2, 3, 3, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)
# Result: [1, 2, 3, 4, 5]
Embora este código pareça bem diferente do primeiro exemplo, a ideia é a mesma, usar um set para obter os números exclusivos. Em seguida, transformar o set em uma lista.
unique_numbers = list(set(numbers))
Ajuda pensar "de dentro para fora" ao ler o código acima. A parte mais interna do código é a primeira a ser avaliada: set(numbers)
. Depois, a parte mais externa é avaliada: list(set(numbers))
.
Opção 2 – Usar a iteração para identificar valores exclusivos
A iteração é outra forma que podemos usar.
A ideia principal é criar uma lista vazia que carregue os números exclusivos. Depois, usar um laço for para iterar por cada número na lista fornecida. Se o número já estiver na lista exclusiva, continuamos para a próxima iteração. Do contrário, adicionamos o número à lista.
Vejamos duas maneiras de usar a iteração para obter os valores exclusivos em uma lista, começando por uma mais extensa.
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]
Aqui veremos o que ocorre a cada passo. Primeiro, recebemos a lista de números, numbers
. Passamos, então, a lista para a função get_unique_numbers
.
Dentro da função, criamos uma lista vazia, unique
. No fim, essa lista terá todos os números exclusivos.
Usamos um laço for para iterar por cada número na lista numbers
.
for number in numbers:
if number in unique:
continue
else:
unique.append(number)
O condicional dentro do laço verifica se o número da iteração atual já está na lista unique
. Se estiver, o laço passa para a próxima iteração. Do contrário, o número é adicionado à lista.
Aqui está o ponto importante: somente os números exclusivos são adicionados. Quando o laço é concluído, retornamos unique
, que contém todos os números exclusivos.
Uma abordagem mais curta com iteração
Há outra maneira de escrever a função com menos linhas.
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]
A diferença está no condicional. Desta vez, ele é definido da seguinte maneira: se o número não estiver em unique
, adicione-o.
if number not in unique:
unique.append(number)
Caso contrário, o laço passará para o próximo número na lista numbers
.
O resultado é o mesmo. No entanto, às vezes é mais difícil pensar sobre o código e lê-lo quando o booleano é negado.
Há outras formas de encontrar valores exclusivos em uma lista em Python. Você, no entanto, provavelmente acabará escolhendo uma das abordagens tratadas neste artigo.
A autora escreve sobre aprender a programar e sobre as melhores maneiras de se fazer isso em amymhaddad.com. Siga-a no Twitter: @amymhaddad.