2010-05-19 7 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],"") 

écriture d'une fonction pour se débarrasser des lettres en double mais jusqu'à présent ont joué pendant une heure et ne peuvent pas obtenir quoi que ce soit. L'aide serait appréciée, merci.Python - Suppression des doublons d'une chaîne

+2

Cela ressemble devoirs . Si c'est le cas, marquez-le comme tel. –

+0

Si l'ordre n'est pas important pour vous (mais il semble que ce soit le cas), vous pouvez utiliser '" ".join (set (" test "))'. – badp

Répondre

3

Pas le plus efficace, mais la façon la plus simple est:

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

try this ...

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

pour vérifier si la valeur est 'None', vous devez utiliser la vérification d'identité:' est None', pas la vérification de l'égalité ('== None'). – SilentGhost

+1

Utilisez un ensemble au lieu d'un dict - c'est ce qu'ils sont pour. –

+2

@SilentGhost, plus précisément, utilisez 'i in dic' plutôt que de vérifier la valeur de retour de' .get' pour savoir si quelque chose est dans un dict. –

2

En utilisant une compréhension de la liste:

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

Nice. Je pense que vous devriez changer 'si c en espace + chiffres 'à' si c pas en lettres' (et donc, 'à partir des lettres d'importation de chaînes'): votre solution tournerait' "++" 'en' "+" 'et Je ne pense pas que cela se qualifie comme une lettre. – badp

+0

Pourquoi pas, la question ne parle pas de ponctuation. En fait, j'ai utilisé cette solution à la place de string.ascii_letters (comme proposé par SilentGhost) pour pouvoir gérer les caractères non-ascii. Je pense que le mieux serait l'espace + les chiffres + la ponctuation ... mais, la question manque de précisions :) – stanlekub

Questions connexes