Как удалить повторяющиеся элементы в массиве js
Если мы говорим о стандартных возможностях языка, можно удалить повторяющиеся элементы следующим образом:
const numbers = [-1, 3, 9, -9, 100, -100, 100, 100]; const newSet = new Set(numbers); // => Set(6) //new Set создаёт новую коллекцию, а нам нужен массив //воспользуемся методом Array.from(). Получаем: const uniqueNumbers = Array.from(newSet); // => [ -1, 3, 9, -9, 100, -100 ]
Массив с уникальными значениями готов!
16 ноября 2021
Чтобы удалить повторяющиеся элементы из массива, проще всего воспользоваться функцией uniq() из библиотеки ‘lodash’. Эта функция возвращает новый массив, из которого удалены все повторяющиеся элементы.
const uniqNumbers = _.uniq([2, 1, 2, 1]); console.log(uniqNumbers); // => [2, 1]
Как удалить повторяющиеся элементы в списке в Python
Мы знаем, что список в Python может содержать значения любого типа данных. Это также означает, что список может содержать повторяющиеся элементы. А в некоторых скриптах мы можем не захотеть, чтобы в нашем списке были повторяющиеся элементы.
Синтаксис оператора membership:
x in collection x not in collection
Где, x – это элемент, in – ключевое слово в Python, а коллекция – это любая коллекция.
x в коллекции возвращает True, если x присутствует в коллекции, в противном случае – False.
x not in collection возвращает True, если x отсутствует в коллекции, в противном случае – False.
- Возьмите список предметов. Мы должны создать новый список с удаленными повторяющимися элементами из этого списка.
- Создайте новый пустой список.
- Для каждого элемента в данном исходном списке проверьте, присутствует ли элемент в новом списке:
- Если элемента нет в новом списке, добавьте элемент в новый список.
В этом примере мы возьмем список чисел, некоторые из которых являются дубликатами. Затем мы применим описанный выше пошаговый процесс, чтобы отбросить дубликаты и включить только уникальные элементы.
list1 = [2, 3, 7, 3, 6, 2, 8, 8] list2 = [] for item in list1: if item not in list2: list2.append(item) print(list2)
[2, 3, 7, 6, 8]
В приведенном выше примере мы скопировали уникальные элементы в новый список. Но что, если мы хотим удалить повторяющиеся элементы из исходного списка.
- Возьмите список элементов. Мы собираемся удалить дубликаты, присутствующие в этом списке.
- Инициализируйте индекс с помощью 1. Поскольку первый элемент будет уникальным, мы проверяем его со второй позиции, а не с первой.
- Запустите цикл while с условием, что индекс должен быть меньше длины данного списка:
- Если элемент по индексу присутствует в подсписке, части списка, которая присутствует перед этой позицией индекса, удалите элемент по индексу. В противном случае увеличьте индекс и продолжите цикл while.
Чтобы найти подсписок, присутствующий перед индексом во время каждой итерации цикла while, мы используем технику Python Slicing.
list1 = [2, 3, 7, 3, 6, 2, 8, 8] index = 1 while index < len(list1): if list1[index] in list1[ : index]: list1.pop(index) else: index += 1 print(list1)
Способы удаления дубликатов из списка в Python

Удаление дубликатов списка достаточно простая задача. При этом, знание ее вариантов имеет большое практическое значение. И в сегодняшней статье мы рассмотрим варианты получения уникального списка элементов из исходной последовательности. И рассмотрим варианты реализации.
Наивный метод.
В наивном методе мы просто проходим по списку и добавляем первое вхождение элемента в новый список, игнорируя все остальные вхождения этого конкретного элемента.
# Код демонстрирует удаление дубликатов
# из списка наивным методом# инициализация списка
my_list = [1, 3, 5, 6, 3, 5, 6, 1]
print ("Оригинальный список : " + str(my_list))# используем наивный метод
# чтобы убрать дубликаты
# из списка
li = []
for i in my_list:
if i not in li:
li.append(i)# список после удаления дубликатов
print ("список после удаления дубликатов : " + str(li))Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]
список после удаления дубликатов : [1, 3, 5, 6]Использование генератора списков.
Данный метод аналогичен предыдущему, но использует запись в виде одной строки, с использованием генератора списков.
# Код демонстрирует удаление дубликатов
# из списка с помощью генератора списков# инициализация списка
my_list = [1, 3, 5, 6, 3, 5, 6, 1]
print ("Оригинальный список : " + str(my_list))# используем генератор списка
# чтобы удалить дубликатыli = []
[li.append(x) for x in my_list if x not in li]# вывод списка после удаления элементов
print ("Список после удаления дубликатов : " + str(li))Оригинальный список : [1, 3, 5, 6, 3, 5, 6, 1]
список после удаления дубликатов : [1, 3, 5, 6]Использование set().
Это самый популярный способ, с помощью которого дубликаты удаляются из списка. Но главным и заметным недостатком этого подхода является то, что в этом конкретном методе порядок элементов теряется.
# Код Python3 показывает как
# удалять дубликаты из списка методом set()# инициализация списка
my_list = [1, 5, 3, 6, 3, 5, 6, 1]
print ("Оригинальный список : " + str(my_list))# используем set()
# чтобы удалить дубликаты из списка
my_list = list(set(my_list))# вывод списка после удаления элементов
# не сохраняет порядок
print ("Список после удаления дубликатов: " + str(my_list))Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
Список после удаления дубликатов: [1, 3, 5, 6]Генератор списка + enumarate().
Генератор списка в сочетании с функцией перечисления также может решить эту задачу. Он ищет уже существующие элементы и пропускает их добавление. Также сохраняет порядок списка.
# Код Python3 показывает как удалять дубликаты из списка
# используя генератор списков(list comprehension) + enumerate()# инициализация списка
my_list = [1, 5, 3, 6, 3, 5, 6, 1]
print ("Оригинальный список : " + str(my_list))# используем list comprehension + enumerate()
# чтобы удалить дубликаты из спискаli = [i for n, i in enumerate(my_list) if i not in my_list[:n]]
# вывод списка после удаления элементов
print ("Список после удаления дубликатов: " + str(li))Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
Список после удаления дубликатов: [1, 5, 3, 6]Модуль collections.OrderedDict.fromkeys().
Это самый быстрый метод для достижения конкретной задачи. Сначала он удаляет дубликаты и возвращает словарь, который необходимо преобразовать в список. Он также хорошо работает и в случае строк.
# Код Python3 показывает как удалять дубликаты из списка
# с помощью collections.OrderedDict.fromkeys()from collections import OrderedDict
# инициализация списка
my_list = [1, 5, 3, 6, 3, 5, 6, 1]
print ("Оригинальный список : " + str(my_list))# используем модуль collections.OrderedDict.fromkeys()
# чтобы удалить дубликаты из списка# вывод списка после удаления элементов
print ("Список после удаления дубликатов: " + str(li))Оригинальный список : [1, 5, 3, 6, 3, 5, 6, 1]
Список после удаления дубликатов: [1, 5, 3, 6]Таким образом, для получения списка из уникальных элементов в Python, применимы все вышеуказанные методы. Но при этом встроенный модуль collections минимизирует скорость выполнения задачи.


Создано 21.09.2021 10:33:00
- Михаил Русаков
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновленияЕсли у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
Удалить повторяющиеся значения из списка Python
В этом посте мы обсудим, как удалить повторяющиеся значения из списка в Python.
1. Использование набора
Простое решение — вставить все элементы из списка в набор, исключающий дубликаты. Обратите внимание, что это вернет все уникальные значения, но не сможет сохранить исходный порядок элементов в списке.
if __name__ == '__main__' :
nums = [ 1 , 5 , 2 , 1 , 4 , 5 ]
nums [ : ] = list ( set ( nums ) )
print ( nums ) # [1, 2, 4, 5]2. Использование понимания списка
Если вам нужно сохранить порядок вставки элементов в список, вы можете использовать понимание списка с помощью index() функция. Следующий код демонстрирует это.
if __name__ == '__main__' :
nums = [ 1 , 5 , 2 , 1 , 4 , 5 ]
nums [ : ] = [ x for i , x in enumerate ( nums ) if i == nums . index ( x ) ]
print ( nums ) # [1, 5, 2, 4]Чтобы повысить производительность, избавьтесь от index() и использовать set вместо этого структура данных:
if __name__ == '__main__' :
nums = [ 1 , 5 , 2 , 1 , 4 , 5 ]
visited = set ( )
nums [ : ] = [ x for x in nums if x not in visited and not visited . add ( x ) ]
print ( nums ) # [1, 5, 2, 4]3. Использование сокращения
В качестве альтернативы вы можете использовать уменьшить операцию в списке, чтобы удалить из него дубликаты. Вот как будет выглядеть код:
from functools import reduce
if __name__ == '__main__' :
nums = [ 1 , 5 , 2 , 1 , 4 , 5 ]
nums [ : ] = reduce ( lambda l , x : l if x in l else l + [ x ] , nums , [ ] )
print ( nums ) # [1, 5, 2, 4]4. Использование словаря
До версии Python 3.7 вы можете использовать OrderedDict , который может запоминать порядок вставки. Идея состоит в том, чтобы использовать fromkeys() функция класса, которая возвращает новый словарь со значениями по умолчанию None . Чтобы получить отдельные ключи, просто преобразуйте их в список, как показано ниже: