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とは異なります。
>>> foo = "SSYYNNOOPPSSIISS"
>>> import itertools
>>> ''.join(ch for ch, _ in itertools.groupby(foo))
'SYNOPSIS'
これは、itertoolsをインポートしないソリューションです。
foo = "SSYYNNOOPPSSIISS"
''.join([foo[i] for i in range(len(foo)-1) if foo[i+1]!= foo[i]]+[foo[-1]])
Out[1]: 'SYNOPSIS'
しかし、それは他の方法よりも遅いです!
これはどう:
oldstring = 'SSSYYYNNNOOOOOPPPSSSIIISSS'
newstring = oldstring[0]
for char in oldstring[1:]:
if char != newstring[-1]:
newstring += char
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をリストの最後の要素と比較した場合のソリューションでも機能しないことを発見しました。
どうですか
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)