Python Unique List - Как да получите всички уникални стойности в списък или масив

Да предположим, че имате списък, който съдържа дублирани номера:

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,.

Вътре във функцията създавам празен списък, който в крайна сметка ще съдържа всички уникални числа. След това използвам a, за setда получа уникалните номера от numbersсписъка.

unique_numbers = set(numbers) 

Имам това, от което се нуждая: уникалните номера. Сега трябва да вкарам тези стойности в списък. За целта използвам цикъл for, за да прегледам всяко число в набора.

for number in unique_numbers: list_of_unique_numbers.append(number) 

При всяка итерация добавям текущия номер към списъка list_of_unique_numbers,. Накрая връщам този списък в края на програмата.

Има по-кратък начин да използвате набор и списък, за да получите уникални стойности в Python. С това ще се заемем по-нататък.

По-кратък подход със комплект

Целият код, написан в горния пример, може да бъде кондензиран в един ред с помощта на вградените функции на 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.