2013-05-15 5 views
1

В Python я хотел бы удалить повторяющиеся буквы из строки, но не числа или пробелы. Я придумал:Удаление только альфа-дубликатов

result = [] 
seen = set() 
for char in string: 
    if char not in seen: 
     seen.add(char) 
     result.append(char) 
return "".join(result) 

Но что делает:

>>> delete_duplicate_letters("13 men were wounded in an explosion yesterday around 3:00pm.") 
13 menwroudiaxplsyt:0. 

Когда я хочу:

>>> delete_duplicate_letters("13 men were wounded in an explosion yesterday around 3:00pm.") 
13 men wr oud i a xpls yt 3:00. 

Я пытался использовать letter вместо char, функция isalpha() и if int заявления и т. д., но я не мог заставить работать.

ответ

1

Попробуйте это:

result = "" 
for char in string: 
    if not (char.isalpha() and char in result): 
     result += char 
+0

+1 для приятного простого решения, просто надейтесь, что строка не станет действительно большой или квадратичная продолжительность выполнения будет – jamylak

1

использование str.isspace и str.isdigit:

strs = "13 men were wounded in an explosion yesterday around 3:00pm." 
result = [] 
seen = set() 
for char in strs: 
    if char not in seen: 
     if not (char.isspace() or char.isdigit()): 
      seen.add(char) 
     result.append(char) 
print "".join(result) 

выход:

13 men wr oud i a xpls yt 3:00. 
0

Похоже, вы уже почти там. Вы можете просто добавить некоторые проверки в цикле:

result = [] 
seen = set() 
for char in string: 
    if char.isdigit() or char.isspace(): 
     result.append(char) 
    elif char not in seen: 
     seen.add(char) 
     result.append(char) 
return "".join(result) 
+0

+1 Хорошее решение, но это создает дополнительное пространство, так как 'around' полностью удален – jamylak

+1

@NiklasHansson See Обновление OP: необходимо сохранить несколько цифр. –

+0

Плохо, он изменил свой пример. –

2
>>> from string import digits, whitespace 
>>> from collections import OrderedDict 
>>> s = set(whitespace + digits) 
>>> ''.join(OrderedDict((object() if c in s else c, c) for c in text).values()) 
'12 men wr oud i a xpls yt 3:00.' 

object() здесь используется только чтобы убедиться, что ключи для символов, которые вы хотите оставить в всегда уникален поскольку object() создает другой объект каждый раз. Другие символы используются в качестве самих ключей, поэтому дубликаты фильтруются.

+0

Это заслуживает, как баджон, голосов. Это выглядит так ... awesome – TerryA

+0

+1 Это круто, никогда не слышал о 'object()' before. –

 Смежные вопросы

  • Нет связанных вопросов^_^