Удаление повторяющихся символов из строки
Как удалить повторяющиеся символы из строки с помощью Python? Например, допустим, у меня есть строка:
Как сделать веревочку:
ПРИМЕЧАНИЕ: порядок не важен
задан 23 марта ’12, 14:03
@AljoshaBre — используйте кнопку «закрыть» и выберите close as dupe и укажите ссылку. Спасибо — Martin Beckett
@AljoshaBre Ни один из этих ответов не гарантирует поддержания порядка. — Marcin
Ссылка на самом деле уже есть. Всего 4 клика. — ulidtko
15 ответы
Если порядок не имеет значения, вы можете использовать
set() создаст набор уникальных букв в строке, и «».join() соединит буквы обратно в строку в произвольном порядке.
Если заказ делает дело, вы можете использовать dict вместо набора, который, начиная с Python 3.7, сохраняет порядок вставки ключей. (В реализации CPython это уже поддерживается в Python 3.6 как деталь реализации.)
в результате получается строка «mpt» . В более ранних версиях Python вы можете использовать collections.OrderedDict , который был доступен начиная с Python 2.7.
ответ дан 31 мар ’20, в 10:03
+ 1: fromkeys() используется не очень часто, но здесь вы найдете ему отличное применение. — Эрик О Лебигот
print «» .join (OrderedDict.fromkeys (foo)) ^ SyntaxError: недопустимый синтаксис — Флик
@flik Да, как уже отмечалось, приведенный выше код предназначен для Python версии 2.7. — Свен Марнах
Removing duplicate characters from a string
How can I remove duplicate characters from a string using Python? For example, let’s say I have a string:
How can I make the string:
NOTE: Order is not important
16 Answers 16
If order does not matter, you can use
set() will create a set of unique letters in the string, and «».join() will join the letters back to a string in arbitrary order.
If order does matter, you can use a dict instead of a set, which since Python 3.7 preserves the insertion order of the keys. (In the CPython implementation, this is already supported in Python 3.6 as an implementation detail.)
Python-сообщество
Всем привет!
Понадобилось в большом файле удалить повторяющиеся строки.
Нагуглил такой код:
#2 Июль 18, 2014 08:57:22
Удалить дубликаты строк
Seganapa
ты не знаешь что делает count?
#3 Июль 18, 2014 09:03:08
Удалить дубликаты строк
Я знаю что делает count, но как это помогает сравнить строки? По количеству символов что ли?
#4 Июль 18, 2014 09:41:44
Удалить дубликаты строк
Ты же в список строки добавляешь, поэтому count возвращает количество строк в списке.
Это плохой алгоритм.
#5 Июль 18, 2014 10:10:48
Удалить дубликаты строк
Ну я так и подумал. Т.е. Если так получится что в двух строках будут разные слова но одинаковое количество символов, то строки будут считаться одинаковыми. Я прав? Подтвердите мои подозрения ))
В таком случае этот алгоритм мне не подходит. Как правильно сделать?
#6 Июль 18, 2014 10:21:06
Удалить дубликаты строк
А вы код проверили, прежде чем клеймить? На мой взгляд, он совершеннно правильный
Как я могу удалить повторяющиеся слова в строке с Python?
Как я могу удалить вторые два дубликата «calvin» а также «klein» ?
Результат должен выглядеть так
должны быть удалены только вторые дубликаты, а последовательность слов не должна изменяться!
16 ответов
Это сортирует набор всех (уникальных) слов в вашей строке по индексу слова в исходном списке слов.
В Python 2.7+ вы можете использовать collections.OrderedDict за это:
Вырезать и вставить из рецептов itertools
Я действительно хотел бы, чтобы они могли сделать модуль из этих рецептов в ближайшее время. Я бы очень хотел быть в состоянии сделать from itertools_recipes import unique_everseen вместо того, чтобы использовать вырезать и вставить каждый раз, когда мне что-то нужно.
Используйте как это:
Пояснение:
.split() — это метод разделения строки на список (без параметров она разделяется пробелами)
set() — это тип неупорядоченных коллекций, которые исключают дубликаты
‘separator’.join(list) — означает, что вы хотите объединить список из параметров в строку с разделителем между элементами
Вы можете использовать набор для отслеживания уже обработанных слов.
Несколько ответов довольно близки к этому, но не совсем так, как я это сделал:
Конечно, если вы хотите немного чище или быстрее, мы можем немного изменить рефакторинг:
Я думаю, что вторая версия является настолько же производительной, насколько вы можете получить в небольшом количестве кода. (Можно использовать больше кода, чтобы выполнить всю работу за одно сканирование всей входной строки, но для большинства рабочих нагрузок этого должно быть достаточно.)