Удалить повторяющиеся символы питон

Python: лучший способ удалить повторяющийся символ из строки

Как удалить повторяющиеся символы из строки с помощью Python? Например, допустим, у меня есть строка:

Я новичок в python и тем, что устал, и он работает. Я знал, что есть умный и лучший способ сделать это.. и только опыт может показать это.

def RemoveDupliChar(Word): NewWord = " " index = 0 for char in Word: if char != NewWord[index]: NewWord += char index += 1 print(NewWord.strip()) 

6 ответов

>>> foo = "SSYYNNOOPPSSIISS" >>> import itertools >>> ''.join(ch for ch, _ in itertools.groupby(foo)) 'SYNOPSIS' 

@RahulPatil, _ ( grp перед модификацией ответа) является итеративной, что дает отдельные элементы (здесь символы), которые сгруппированы вместе.

@RahulPatil Это обычно используется в циклах как имя заполнителя. Вы никогда не используете это, но это помещено туда, потому что Вы должны поместить кое-что. itertools.groupby является частью модуля itertools в стандартной библиотеке. В ответе фальсетру есть ссылка

Это работает, как показано, если вы хотите, чтобы результат был «СИНПСИС». Но что, если вы хотите, чтобы результатом был ‘SYNOPI’, где ни один символ не повторяется более одного раза. А что, если вы хотите, давайте скажем «jill» от «jillll» как «jill» — это правильное написание.

@rabinutam, Использование collections.OrderedDict : from collections import OrderedDict; print(».join(OrderedDict.fromkeys(«SSYYNNOOPPSSIISS»)))

Это решение без импорта itertools:

foo = "SSYYNNOOPPSSIISS" ''.join([foo[i] for i in range(len(foo)-1) if foo[i+1]!= foo[i]]+[foo[-1]]) Out[1]: 'SYNOPSIS' 

Но он медленнее, чем метод других!

def remove_duplicates(astring): if isinstance(astring,str) : #the first approach will be to use set so we will convert string to set and then convert back set to string and compare the lenght of the 2 newstring = astring[0] for char in astring[1:]: if char not in newstring: newstring += char return newstring,len(astring)-len(newstring) else: raise TypeError("only deal with alpha strings") 

Я обнаружил, что решение с itertools и с подсчетом списка даже решение, когда мы сравниваем char с последним элементом списка, не работает

oldstring = 'SSSYYYNNNOOOOOPPPSSSIIISSS' newstring = oldstring[0] for char in oldstring[1:]: if char != newstring[-1]: newstring += char 
foo = "SSYYNNOOPPSSIISS" def rm_dup(input_str): newstring = foo[0] for i in xrange(len(input_str)): if newstring[(len(newstring) - 1 )] != input_str[i]: newstring += input_str[i] else: pass return newstring print rm_dup(foo) 
def removeDuplicate(s): if (len(s)) < 2: return s result = [] for i in s: if i not in result: result.append(i) return ''.join(result) 

Ещё вопросы

  • 1 JAVA, какие элементы списка не находятся в другом списке
  • 0 угловые 1.2.15 бегущие параллельные петли
  • 0 Избыточная загрузка углового модуля на нижнем уровне?
  • 1 Как мы проверяем, совместимо ли значение объекта с полем примитивного типа в Java
  • 1 Скопируйте большие файлы максимально быстро
  • 0 Используя библиотеку PHP Podio, не могу получить данные рейтинга через PodioItem :: get ($ id)
  • 1 Используйте API расширения Chrome в компоненте Vue.js
  • 1 получение сообщения с использованием программирования сокетов в c # не работает
  • 1 d3.behavior.zoom () перемещает график в угол вместо центра
  • 1 Где MemoryStream записывает данные
  • 1 Altbeacon 2.16.1 не может сканировать маяки с определенным кодом типа маяка
  • 1 DataColumn в список (тот же тип данных)
  • 0 Как нажать в AngularJS
  • 0 Как вычесть количество моих продуктов, перечисленных в списке, непосредственно в мою базу данных продуктов? (Баз данных)
  • 1 Перенаправить на ту же страницу в другой папке
  • 0 добавление данных в таблицу из базы данных
  • 0 Удаление определенной части массива PHP
  • 0 Как решить конфликт с package_find из CMake?
  • 1 Как установить адаптеры вложенных представлений рециркулятора при использовании привязки данных?
  • 1 Переменная класса NameError не определена python
  • 1 Функция хеширования Java MD5, дающая неправильный хеш
  • 1 Выкладывание JTextField как JLabel, который можно обернуть - нежелательное поведение
  • 1 Разобрать данные и представить изображение PNG
  • 0 Как передать выбранные значения в JavaScript
  • 0 Изменение ориентации вызывает изменение размера шрифта
  • 0 Предотвращение атак RFI при использовании переменных URL
  • 1 KnockoutJS - показать накопленную стоимость для каждого элемента
  • 1 Java получить и объединить файл из нескольких потоков
  • 0 Паспорт логин - mysql
  • 0 Почему .NET 4.0 скрывает атрибут имени в созданном LinkButton?
  • 0 Как изменить значения полей ввода, которые соответствуют значению атрибута данных с Jquery
  • 1 Размер JPEG в виде байтового массива для Web API
  • 0 Цвет фона панели навигации не занимает всю ширину
  • 0 как группировать столбцы mysql с условиями
  • 0 CSS - плавающая проблема для адаптивного дизайна
  • 0 Вызов C ++ (член) функционирует динамически
  • 0 Я не могу получить доступ к определенным ресурсам (параметры URL) Java
  • 1 EditText - Cap слов без предложений?
  • 1 Tokenize.detect_encoding (readline) есть только в python3?
  • 1 Полимер служит для изменения обслуживаемых файлов JavaScript для Internet Explorer 11. Как заставить его работать на другом веб-сервере?
  • 1 Android NSD: почему тип сервиса не совпадает
  • 0 Удалить дублирование на основе информации одного столбца
  • 0 .htaccess vs chmod в чем разница с точки зрения разрешения
  • 0 Как я могу читать не символы, такие как арабские слова в PHP
  • 1 Guice - Ограничения полевых инъекций
  • 0 fstream, ofstream, передача имени документа, C ++
  • 1 Как обработать несколько строк с помощью пружинной партии?
  • 0 __try и __except не работают в сборке релиза
  • 0 Перезагрузка угловых / ионных повторов
  • 1 Моя программа зачетных книжек не печатает должным образом, чтобы превзойти документ

Источник

Удаление из строки повторяющихся символов

Удаление повторяющихся символов
Множество содержит 7-10 ключевых слов. Программа должна удалить из них все повторяющиеся символы. В.

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

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

Удаление повторяющихся символов из строки
Есть задание: Отредактировать введенную строку, удаляя из него буквы, которые встречаются заданное.

Эксперт Python

Может сами попробуете написать? А мы поможем?

s = 'aaaabbbaccccdd' new_s = [s[0]] for i in s[1:]: if True: new_s.append(i) print(''.join(new_s))
s = "wfewgefedgfggf" r = "".join(set(s)) print(r)
>>> 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' >>>

ЦитатаСообщение от vic5710 Посмотреть сообщение

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)

ЦитатаСообщение от vic5710 Посмотреть сообщение

Да, после 20 лет С/С++ сишные шаблоны рвутся трудно 🙂

x = 'aaaabbbaccccdd' y = [] for i in x : if i not in y: y.append(i) print(''.join(y))
>> x = 'qqqwwwqw' >>> y = [] >>> for i in x: if not i in y: y += i >>> ''.join(y) 'qw' >>>

ЦитатаСообщение от vic5710 Посмотреть сообщение

x = 'aaaabbbaccccdd' y = [] for i in x : if i not in y: y.append(i) print(''.join(y)) print(''.join(set(x))) abcd dabc

ЦитатаСообщение от Semen-Semenich Посмотреть сообщение

vic5710, понял свою ошибку. условие как то звучит не конкретно по заданию. надо из непрерывной последовательности одинаковых элементов в строке удалять повторы а не из всей строки

ЦитатаСообщение от Pain777 Посмотреть сообщение

Удаление повторяющихся символов строки
Здравствуйте,встретился с такой задачей: Создать динамический массив(размер можно вести с.

Удаление повторяющихся символов из строки
В введённой строке необходимо поудалять все повторяющиеся символы: var T:array of char;.

Удаление повторяющихся символов из строки
Доброго времени суток! Вводится строка. Требуется удалить из нее повторяющиеся символы и все.

Поиск и удаление повторяющихся символов из строки (AnsiString)
мож кому пригодиться, мало ли:) AnsiString str="11112334455";///исходная строка AnsiString.

Удаление повторяющихся символов
Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Напечатать все.

Удаление повторяющихся символов
Помогите дураку, надо написать программу которая находит повторяющийся символ и удаляет его.

Источник

Удаление всех дубликатов символов из заданной строки в 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.

Источник

Как убрать все идущие подряд идентичные символы в строке?

Нудно проанализировать файл и убрать все идущие подряд символы, которые повторяются по два раза.
Пример ввода: wwaldaadicffenn .
Вывод: alice .
Мой код почему-то игнорирует daad в центре:

arr2 = [] with open("input.txt",'r') as message: for line in message: arr = list(line) for i in arr: if arr[arr.index(i)] != arr[arr.index(i)+1]: arr2.append(i) print(arr2)

Alexeytur

arr2 = [] with open("input.txt",'r') as message: for line in message: arr = list(line) i = 0 while i < len(arr): if i == len(arr)-1 or arr[i] != arr[i+1]: arr2.append(arr[i]) i += 1 else: i += 2 print(arr2)

LazyTalent

import re s = "wwaldaadicffenn" regex = re.compile(r"([a-z])\1+") while True: if not regex.findall(s): break s = regex.sub("", s)
while regex.findall(s): s = regex.sub("", s)

А еще лучше, наверное, через search, чтобы не проверять все вхождения, а только первое:

while regex.search(s): s = regex.sub("", s)

Кончено не особо красива получилось, на скорую руку набросал, но данная функция выполняет ваш запрос

with open("input.txt",'r', encoding="utf-8") as message: data = message.read() arr_str = "55ццуучффвввтиио99аа 1122ткккппрро 33ттаапттоттткккккклммучифффлввосрррь" def double(arr): """ цикл работает до тех пор, пока мы не убедимся в том, что, идущие подряд символы, которые повторяются по два раза, были удалены """ while True: arr2 = "" gap = 0 try: for i in range(len(arr)): if arr[i] != arr[i+1]: # если не совпадает символ идем дальше, первый и второй символ if arr[i] != arr[i-1]: # проверяем первый и перед ним символ arr2 += arr[i] # если не совпадают записываем else: gap += 1 except: # исключение, если в строке нет индекса +1 if arr[i] != arr[i-1]: # проверяем первый и перед ним символ arr2 += arr[i] # если не совпадают записываем arr = "" # очищаем строку, для записи новых данных arr += arr2 # записываем if gap == 0: # останавливаем цикл, так как дублирующих подряд символов нет break return arr print(double(arr_str)) print(double(data))

Похожая задача уже была здесь
Там есть решение с использованием стека.
С минимальными изменениями подходит и для вашей задачи.

def del_dup(line): stack = [] for char in line: stack.pop() if stack and char == stack[-1] else stack.append(char) return ''.join(stack) text = 'wwaldaadicffenn' print(del_dup(text)) In [4]: alice

Войдите, чтобы написать ответ

Как взаимодействовать с элементом в Selenium?

Источник

Читайте также:  All identifiers in java
Оцените статью