Скажімо, у вас є список, що містить повторювані номери:
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.