Compare the element with the rest of the Python List

I need to create a program where in the given list, if the name is repeated it puts a numbering. For example: names = [maria, joao, maria] result should be result = [maria, joao, maria1]

Another example: names = [eduardo, joao, eduardo, eduardo] result = [eduardo, joao, eduardo1, eduardo2]

I set up a code where it compares with the next name, I do not know how it does to continue the comparison.

Follow my Code:

insert the description of the image here

Author: tatiane berrocal, 2019-08-17

3 answers

You can use a Dictionary to save how many times a name has appeared.

names = ['eduardo', 'joao', 'eduardo', 'eduardo', 'joao']

d = {}

for i in range(len(names)):
    if names[i] in d:
        d[names[i]] += 1
        names[i] += str(d[names[i]])
    else:
        d[names[i]] = 0
 0
Author: Leafar, 2019-08-18 00:25:41

With dictionary you can save the names and the number of times you repeat:

    def usernamesSystem(u):
        cont = 0
        aDict = {}
        result = []
        for i in range(len(u)):
            cont = checkKey(aDict, u[i]) # verifica o numero de ocorrencia do nome
            if cont == 0:
                aDict[u[i]] = 1 # primeira ocorrencia, guarda valor 1 no dictionary
                result.append(u[i]) # carrega o array de output com a palavra 
            else:
                aDict.update({u[i]: cont + 1 }) # atualiza as ocorrencias do nome no dictionary
                result.append(u[i] + str(cont)) # carrega o array de output com o nome concatenado com o numero de vezes repetido
        return result # array de output com o resultado

    def checkKey(dict, key): 
        if key in dict.keys(): 
            return dict[key] # retorna o numero de ocorrencias quando ja existe no dictionary
        else: 
            return 0 # retorna 0 se não existir
 0
Author: Ernesto Casanova, 2019-08-18 01:01:08

I now put the most complete answer, with the Class I used.

class Usernames:

    @staticmethod
    def usernamesSystem(u):
        cont = 0
        aDict = {}
        result = []
        for i in range(len(u)):
            cont = Usernames.checkKey(aDict, u[i])
            if cont == 0:
                aDict[u[i]] = 1
                result.append(u[i])
            else:
                aDict.update({u[i]: cont + 1 })
                result.append(u[i] + str(cont))
        return result

    @staticmethod
    def checkKey(dict, key): 
        if key in dict.keys(): 
            return dict[key] 
        else: 
            return 0

nomes = ['eduardo', 'joao', 'eduardo', 'eduardo']
print(Usernames.usernamesSystem(nomes))
 0
Author: Ernesto Casanova, 2019-08-18 13:05:04