it-swarm.com.de

Python: Bester Weg, um doppelte Zeichen aus dem String zu entfernen

Wie kann ich mit Python doppelte Zeichen aus einem String entfernen? Angenommen, ich habe eine Zeichenfolge:

foo = "SSYYNNOOPPSSIISS"

Wie kann ich den String machen:

foo = SYNOPSIS

Ich bin neu in Python und Was ich müde habe und es funktioniert. Ich wusste, dass es einen klugen und besten Weg gibt, dies zu tun. Nur die Erfahrung kann dies zeigen.

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

HINWEIS: Die Reihenfolge ist wichtig und diese Frage ähnelt nicht this one.

12
Rahul Patil

Verwenden von itertools.groupby :

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

Dies ist eine Lösung, ohne Itertools zu importieren:

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

Out[1]: 'SYNOPSIS'

Aber es ist langsamer als die andere Methode!

4
G M

Wie wäre es damit:

oldstring = 'SSSYYYNNNOOOOOPPPSSSIIISSS'
newstring = oldstring[0]
for char in oldstring[1:]:
    if char != newstring[-1]:
        newstring += char    
2
Elliott
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")

Ich habe diese Lösung mit itertools und mit Listenverständnis entdeckt, selbst wenn wir das Zeichen mit dem letzten Element der Liste vergleichen, funktioniert sie nicht

1

Wie wäre es mit

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)
0
rrao
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)  
0
jtu