web-dev-qa-db-ja.com

Python:文字列から重複する文字を削除するための最良の方法

Pythonを使用して文字列から重複する文字を削除するにはどうすればよいですか?たとえば、文字列があるとします。

foo = "SSYYNNOOPPSSIISS"

文字列を作成するにはどうすればよいですか?

foo = SYNOPSIS

私はpythonと私が疲れていて、それが機能していることに慣れていません。これを行うための賢くて最良の方法があることを知っていました。そして経験だけがこれを示すことができます。

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

注:順序は重要であり、この質問は this 1とは異なります。

12
Rahul Patil

itertools.groupby

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

これは、itertoolsをインポートしないソリューションです。

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

Out[1]: 'SYNOPSIS'

しかし、それは他の方法よりも遅いです!

4
G M

これはどう:

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")

Itertoolsとリスト内包表記を使用したソリューションでさえ、charをリストの最後の要素と比較した場合のソリューションでも機能しないことを発見しました。

1

どうですか

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