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

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

foo = 'mppmt'

Как создать строку:

foo = 'mpt'

ПРИМЕЧАНИЕ: Заказ не важен

Ответ 1

Если порядок не имеет значения, вы можете использовать

"".join(set(foo))

set() создаст набор уникальных букв в строке, а "".join() объединит буквы обратно в строку в произвольном порядке.

Если порядок имеет значение, вы можете использовать collections.OrderedDict в Python 2.7 или выше:

from collections import OrderedDict
foo = "mppmt"
result = "".join(OrderedDict.fromkeys(foo))

в результате получается строка "mpt".

Ответ 2

Если порядок имеет значение, как насчет:

>>> foo = 'mppmt'
>>> ''.join(sorted(set(foo), key=foo.index))
'mpt'

Ответ 3

Если порядок не в этом:

>>> foo='mppmt'
>>> ''.join(set(foo))
'pmt'

Чтобы сохранить порядок:

>>> foo='mppmt'
>>> ''.join([j for i,j in enumerate(foo) if j not in foo[:i]])
'mpt'

Ответ 4

Создайте список в Python, а также набор, который не допускает дублирования. Решение 1:

def fix(string):
    s = set()
    list = []
    for ch in string:
        if ch not in s:
            s.add(ch)
            list.append(ch)

    return ''.join(list)        

string = "Protiijaayiiii"
print(fix(string))

Метод 2:

s = "Protijayi"

aa = [ ch  for i, ch in enumerate(s) if ch not in s[:i]]
print(''.join(aa))

Ответ 5

#We can do it simply by using Regex libs of python.

#Check code and apply in your Program:

#Input= 'pppmm'

import re as reg
s='ppppmm'
pattern=reg.compile(r"(.)\1{1,}",reg.DOTALL)
string=pattern.sub(r"\1",s)
print(string)

#Output: pm

Ответ 6

Если порядок важен,

seen = set()
result = []
for c in foo:
    if c not in seen:
        result.append(c)
        seen.add(c)
result = ''.join(result)

Или сделать это без наборов:

result = []
for c in foo:
    if c not in result:
        result.append(c)
result = ''.join(result)

Ответ 7

Как упоминалось "".join(set (foo)) и коллекции. Добавлен foo = foo.lower(), если строка содержит символы верхнего и нижнего регистра, и вам нужно удалить ВСЕ дубликаты независимо от того, являются ли они верхними или нижними символами.

from collections import OrderedDict
foo = "EugeneEhGhsnaWW"
foo = foo.lower()
print "".join(OrderedDict.fromkeys(foo))

печатает eugnhsaw

Ответ 8

def dupe(str1):
    s=set(str1)

    return "".join(s)
str1='geeksforgeeks'
a=dupe(str1)
print(a)

хорошо работает, если порядок не важен.

Ответ 9

d = {}
s="YOUR_DESIRED_STRING"
res=[]
for c in s:
    if c not in d:
      res.append(c)
      d[c]=1
print ("".join(res))

Ответ 10

def remove_duplicates(value):
    var=""
    for i in value:
        if i in value:
            if i in var:
                pass
            else:
                var=var+i
    return var

print(remove_duplicates("[email protected]@@123#*#*"))

Ответ 11

Поскольку строка представляет собой список символов, преобразование его в словарь удалит все дубликаты и сохранит порядок.

"".join(list(dict.fromkeys(foo)))