Удаление всех дубликатов символов из заданной строки в 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-2023 Русаков Михаил Юрьевич. Все права защищены.
Удаление из строки повторяющихся символов
Удаление повторяющихся символов
Множество содержит 7-10 ключевых слов. Программа должна удалить из них все повторяющиеся символы. В.

Удаление повторяющихся пробелов из строки
На вход подается одна строка текста (не больше 255 символов). Нужно вывести эту же строку, удалив.
Удаление повторяющихся символов из строки
Необходимо написать функцию delete_repeats, которая удаляет все повторяюшиеся символы из строки. .

Удаление повторяющихся символов из строки
Есть задание: Отредактировать введенную строку, удаляя из него буквы, которые встречаются заданное.
394 / 122 / 48
Регистрация: 26.10.2013
Сообщений: 734
тип данных set, вам в помощь)
Просто Лис
![]()
5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9
Может сами попробуете написать? А мы поможем?
1 2 3 4 5 6 7
s = 'aaaabbbaccccdd' new_s = [s[0]] for i in s[1:]: if True: new_s.append(i) print(''.join(new_s))
671 / 474 / 215
Регистрация: 06.09.2013
Сообщений: 1,301
Pain777,
1 2 3
s = "wfewgefedgfggf" r = "".join(set(s)) print(r)
876 / 655 / 252
Регистрация: 10.12.2016
Сообщений: 1,603
set и dict тут не годятся
1 2 3 4 5 6 7 8 9 10
>>> def f(s): out = '' for i in range(len(s) - 1): if s[i] != s[i+1]: out += s[i] if s[-1] != out[-1]: out += s[-1] return out >>> f('qqqwwwqw') 'qwqw' >>>
671 / 474 / 215
Регистрация: 06.09.2013
Сообщений: 1,301
Сообщение от vic5710 
set и dict тут не годятся
Точно, невнимательно прочитал задание
1 2 3 4 5 6
s_in = 'aaaabbbaccccdd' r = [None] for c in s_in: if c != r[-1]: r.append(c) s_out = ''.join(r[1:]) print(s_out)
876 / 655 / 252
Регистрация: 10.12.2016
Сообщений: 1,603
woldemas, изящно
Сообщение от vic5710 
Да вот стараюсь по питонски научится
| Меню пользователя @ woldemas |
Да, после 20 лет С/С++ сишные шаблоны рвутся трудно 🙂
| Меню пользователя vic5710 |
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
1 2 3 4 5 6
x = 'aaaabbbaccccdd' y = [] for i in x : if i not in y: y.append(i) print(''.join(y))
876 / 655 / 252
Регистрация: 10.12.2016
Сообщений: 1,603
Semen-Semenich, это вариант set, не годится
1 2 3 4 5 6 7 8 9
>> x = 'qqqwwwqw' >>> y = [] >>> for i in x: if not i in y: y += i >>> ''.join(y) 'qw' >>>
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
Сообщение от vic5710 
это вариант set, не годится
где вы видите там set?
а теперь два ответа второй это и есть set, разницу думаю заметите.
1 2 3 4 5 6 7 8 9 10 11
x = 'aaaabbbaccccdd' y = [] for i in x : if i not in y: y.append(i) print(''.join(y)) print(''.join(set(x))) abcd dabc
876 / 655 / 252
Регистрация: 10.12.2016
Сообщений: 1,603
Сообщение от Semen-Semenich 
где вы видите там set?
вы эмулировали set — набор уникальных символов в строке
д.б.
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
vic5710, понял свою ошибку. условие как то звучит не конкретно по заданию. надо из непрерывной последовательности одинаковых элементов в строке удалять повторы а не из всей строки
876 / 655 / 252
Регистрация: 10.12.2016
Сообщений: 1,603
Semen-Semenich,
Сообщение от Pain777 
’aaaabbbaccccdd’ -> ’abacd’
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Удаление повторяющихся символов строки
Здравствуйте,встретился с такой задачей: Создать динамический массив(размер можно вести с.
Удаление повторяющихся символов из строки
В введённой строке необходимо поудалять все повторяющиеся символы: var T:array of char;.
Удаление повторяющихся символов из строки
Доброго времени суток! Вводится строка. Требуется удалить из нее повторяющиеся символы и все.
Поиск и удаление повторяющихся символов из строки (AnsiString)
мож кому пригодиться, мало ли:) AnsiString str="11112334455";///исходная строка AnsiString.

Удаление повторяющихся символов
Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Напечатать все.
Удаление повторяющихся символов
Помогите дураку, надо написать программу которая находит повторяющийся символ и удаляет его.
Повторяющийся символы в строке в языке 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
Добавил ваш код в вопрос. Но не уверен про отступы. Не пишите код в комментариях, он там не форматируется нормально. В общем, это неправильный путь, просто попробуйте запоминать предыдущий символ и сравнивать с ним текущий. Потом либо печатайте символ либо не печатайте. Либо копите символы в строке или списке и выводите потом. Заменой строки лучше не пользоваться кроме случаев, когда вам надо какой-то символ совсем из строки удалить, у вас не тот случай.