2010-05-19 1 views
0
def remove_duplicates(strng): 
    """ 
    Returns a string which is the same as the argument except only the 
    first occurrence of each letter is present. Upper and lower case 
    letters are treated as different. Only duplicate letters are removed, 
    other characters such as spaces or numbers are not changed. 

    >>> remove_duplicates('apple') 
    'aple' 
    >>> remove_duplicates('Mississippi') 
    'Misp' 
    >>> remove_duplicates('The quick brown fox jumps over the lazy dog') 
    'The quick brown fx jmps v t lazy dg' 
    >>> remove_duplicates('121 balloons 2 u') 
    '121 balons 2 u' 
    """ 
    s = strng.split() 
    return strng.replace(s[0],"") 

중복 문자를 없애기 위해 함수를 작성하는 데는 한 시간이 걸렸으므로 아무 것도 얻을 수 없습니다. 덕분에 도움을 주실 수 있습니다.Python - 문자열에서 중복 제거

+2

이 숙제처럼 보이는을 . 그렇다면 태그를 붙이십시오. –

+0

주문이 중요하지 않은 경우 (그러나 그 것처럼 보이는 경우), "" ".join (set ("test "))'을 사용할 수 있습니다. – badp

답변

3

가장 효율적인 아니지만, 가장 간단한 방법은 다음과 같습니다

>>> s = 'The quick brown fox jumps over the lazy dog' 
>>> import string 
>>> n = '' 
>>> for i in s: 
     if i not in string.ascii_letters: 
      n += i 
     elif i not in n: 
      n += i 


>>> n 
'The quick brown fx jmps v t lazy dg' 
0

이 시도 ...

def remove_duplicates(s): 
    result = "" 
    dic = {} 
    for i in s: 
     if i not in dic: 
      result+=i 
      if ord(i.lower()) >= ord('a') and ord(i.lower()) <= ord('z'): 
       dic[i] = 1 
    return result 
+3

값이'None'인지 확인하려면 동일성 검사 ('== None')가 아닌 identity check :'is None'을 사용해야합니다. – SilentGhost

+1

dict 대신 집합을 사용하십시오. –

+2

@SilentGhost, 더 중요한 것은'.get'의 반환 값을 검사하는 것보다는'dic'에서'i '를 사용하여 어떤 것이 사전에 있는지 알아내는 것입니다. –

2

지능형리스트 사용 :

>>> from string import whitespace, digits 
>>> s = 'The quick brown fox jumps over the lazy dog' 
>>> ''.join([c for i, c in enumerate(s) if c in whitespace+digits \ 
                 or not c in s[:i]]) 
+0

니스. 제 생각에'공백 + 숫자로 된 경우'를 '문자가 아닌 경우'로 변경해야합니다 (따라서'문자열 가져 오기 문자 '에서) : "++"를 "+"'로 바꾸고 나는 그것이 편지로 자격이 있다고 생각하지 않는다. – badp

+0

왜, 질문은 구두점에 대해 말하지 않습니다. 사실, non-ascii 문자를 처리 할 수 ​​있도록 string.ascii_letters (SilentGhost에서 제안한) 대신이 솔루션을 사용했습니다. 공백 + 숫자 + 문장 부호가 더 좋을 것이라고 생각합니다. 그러나 질문에는 정밀도가 부족합니다 :) – stanlekub