Способы удаления дубликатов из списка в 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
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.
Повторяющийся символы в строке в языке Python
Что вы уже пробовали сделать и в чём у вас проблема? Задачка довольно простая, решается «в лоб» перебором символов строки в цикле, плюс один символ в промежуточной переменной хранится. Ну либо чуть хитрее через zip со сдвигом строки.
20 июн 2022 в 9:39
str_1 = input(«Введите строку:») count = 0 symb = » for el in str_1: if str_1.count(el) > count: count = str_1.count(el) symb = el print(el.replace(el, »))
20 июн 2022 в 9:47
Сейчас у меня что то такое)
20 июн 2022 в 9:47
Добавил ваш код в вопрос. Но не уверен про отступы. Не пишите код в комментариях, он там не форматируется нормально. В общем, это неправильный путь, просто попробуйте запоминать предыдущий символ и сравнивать с ним текущий. Потом либо печатайте символ либо не печатайте. Либо копите символы в строке или списке и выводите потом. Заменой строки лучше не пользоваться кроме случаев, когда вам надо какой-то символ совсем из строки удалить, у вас не тот случай.
Задача 1. Символы. Напишите программу, которая удаляет из строки все повторяющиеся символы.
Вы можете использовать эту функцию, чтобы удалить повторяющиеся символы из строки, как в примерах, которые вы привели:
input_string = "hbh1od2jf1mmk45m5"
output_string = remove_duplicates(input_string)
print(output_string) # hb1od2jfmk45
input_string = "h7fy4rno 3"
output_string = remove_duplicates(input_string)
print(output_string) # h7fy4rno 3
Можно записать данную функцию в 1 строку и результат будет такой же:
def remove_duplicates(string):
return ''.join(sorted(set(string), key=string.index))
Эта функция создает новую строку и добавляет каждый символ из исходной строки только в том случае, если он еще не был добавлен в новую строку. Таким образом, все повторяющиеся символы удаляются, а порядок символов в строке сохраняется.
Такой программы не существует в силу законов мироздания
def remove_duplicates(input_string):
result = »
for char in input_string:
if char not in result:
result += char
return result
# Пример 1
input_string = ‘hbh1od2jf1mmk45m5’
print(remove_duplicates(input_string))
# Пример 2
input_string = ‘h7fy4rno 3’
print(remove_duplicates(input_string))
Эта программа работает, проходя по каждому символу во входной строке и добавляя его в результирующую строку только в том случае, если он еще не присутствует в результирующей строке. Затем она возвращает результирующую строку. Вы можете заменить input_string на любую строку, которую вы хотите обработать.
Удаление всех дубликатов символов из заданной строки в Python
Нам дана строка символов, из которой нужно удалить все дубликаты. При этом порядок символов имеет значение. Каким будет результат?
Input : geeksforgeeks Output : efgkos
Совет: пожалуйста, попробуйте сначала решить эту задачу самостоятельно в своей IDE, а уж потом читать решение.
from collections import OrderedDict def removeDupWithoutOrder(str): return "".join(set(str)) def removeDupWithOrder(str): return "".join(OrderedDict.fromkeys(str)) if __name__ == "__main__": str = "geeksforgeeks" print("Without Order =" , removeDupWithoutOrder(str)) print("With Order EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Without Order = egfkosr With Order = geksfor
Что делают OrderedDict и fromkeys()?
OrderedDict это словарь, который запоминает порядок вставки ключей. Если новое вхождение перезаписывает существующее вхождение, исходная позиция вставки остается неизменной.
Обратите внимание на следующий отрывок кода:
from collections import OrderedDict ordinary_dictionary = <> ordinary_dictionary['a'] = 1 ordinary_dictionary['b'] = 2 ordinary_dictionary['c'] = 3 ordinary_dictionary['d'] = 4 ordinary_dictionary['e'] = 5 # Output = print(ordinary_dictionary) ordered_dictionary = OrderedDict() ordered_dictionary['a'] = 1 ordered_dictionary['b'] = 2 ordered_dictionary['c'] = 3 ordered_dictionary['d'] = 4 ordered_dictionary['e'] = 5 # Output = print(ordered_dictionary)
fromkeys() создает новый словарь и возвращает список ключей. Ключи для нового словаря берутся из seq, а значения — из value (если заданы). Синтаксис метода fromkeys() — fromkeys(seq[, value]).
- seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
- value: Опционально; если задать, значение будет установлено в качестве value.
Способы удаления дубликатов из списка в 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
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.
Удаление всех дубликатов символов из заданной строки в Python
Нам дана строка символов, из которой нужно удалить все дубликаты. При этом порядок символов имеет значение. Каким будет результат?
Input : geeksforgeeks Output : efgkos
Совет: пожалуйста, попробуйте сначала решить эту задачу самостоятельно в своей IDE, а уж потом читать решение.
from collections import OrderedDict def removeDupWithoutOrder(str): return "".join(set(str)) def removeDupWithOrder(str): return "".join(OrderedDict.fromkeys(str)) if __name__ == "__main__": str = "geeksforgeeks" print("Without Order =" , removeDupWithoutOrder(str)) print("With Order EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Without Order = egfkosr With Order = geksfor
Что делают OrderedDict и fromkeys()?
OrderedDict это словарь, который запоминает порядок вставки ключей. Если новое вхождение перезаписывает существующее вхождение, исходная позиция вставки остается неизменной.
Обратите внимание на следующий отрывок кода:
from collections import OrderedDict ordinary_dictionary = <> ordinary_dictionary['a'] = 1 ordinary_dictionary['b'] = 2 ordinary_dictionary['c'] = 3 ordinary_dictionary['d'] = 4 ordinary_dictionary['e'] = 5 # Output = print(ordinary_dictionary) ordered_dictionary = OrderedDict() ordered_dictionary['a'] = 1 ordered_dictionary['b'] = 2 ordered_dictionary['c'] = 3 ordered_dictionary['d'] = 4 ordered_dictionary['e'] = 5 # Output = print(ordered_dictionary)
fromkeys() создает новый словарь и возвращает список ключей. Ключи для нового словаря берутся из seq, а значения — из value (если заданы). Синтаксис метода fromkeys() — fromkeys(seq[, value]).
- seq: Это список значений, которые будут использоваться при подготовке ключей для словаря.
- value: Опционально; если задать, значение будет установлено в качестве value.
Повторяющийся символы в строке в языке Python
Что вы уже пробовали сделать и в чём у вас проблема? Задачка довольно простая, решается «в лоб» перебором символов строки в цикле, плюс один символ в промежуточной переменной хранится. Ну либо чуть хитрее через zip со сдвигом строки.
20 июн 2022 в 9:39
str_1 = input(«Введите строку:») count = 0 symb = » for el in str_1: if str_1.count(el) > count: count = str_1.count(el) symb = el print(el.replace(el, »))
20 июн 2022 в 9:47
Сейчас у меня что то такое)
20 июн 2022 в 9:47
Добавил ваш код в вопрос. Но не уверен про отступы. Не пишите код в комментариях, он там не форматируется нормально. В общем, это неправильный путь, просто попробуйте запоминать предыдущий символ и сравнивать с ним текущий. Потом либо печатайте символ либо не печатайте. Либо копите символы в строке или списке и выводите потом. Заменой строки лучше не пользоваться кроме случаев, когда вам надо какой-то символ совсем из строки удалить, у вас не тот случай.
Удаление из строки повторяющихся символов
Вводится строка. Требуется удалить из нее повторяющиеся символы и все пробелы. Например, если было введено «abc cde def», то должно быть выведено «abcdef».
Проще всего задачу решить, если формировать результирующую строку в другой переменной, а не изменять значение переменной, которой была присвоена введенная строка.
Извлекать каждый символ введенной строки. Если он не встречается в новой строке и не является пробелом, то добавлять его в конец новой строки.
Pascal
var
s1,s2: string;
c: char;
i: byte;
begin
readln(s1);
s2 := '';
for i:=1 to length(s1) do begin
c := s1[i];
if (pos(c,s2) = 0) and (c <> ' ') then
s2 := s2 + c
end;
writeln(s2);
end.
abc cde def
abcdef
Язык Си
#include < string.h>
main() char s[100], s_new[100];
char c, i, j;
gets(s);
j = 0;
for (i=0; i < strlen(s); i++) c = s[i];
if (strchr(s_new,c) == NULL && c != ' ') s_new[j] = c;
j += 1;
>
>
s_new[j] = '\0';
puts(s_new);
>
cpu gpu mb cooler
cpugmboler
Python
удалить повторяющиеся символы в строке python
# Вариант 1
s = input()
s_new = ''
for i in range(len(s)):
if s_new.find(s[i]) == -1 and s[i] != ' ':
s_new += s[i]
print(s_new)
# Вариант 2
s = input()
s_new = ''
for i in s:
if i not in s_new and i != ' ':
s_new += i
print(s_new)
a a b d c a c k l c d f
abdcklf
Basic-256
input s$
s_new$ = mid(s$,1,1)
for i=2 to length(s$)
a$ = mid(s$,i,1)
if instr(s_new$,a$) = 0 and a$ <> " " then
s_new$ = s_new$ + a$
endif
next i
print s_new$