python - Loop through entries in a list and create new list -


i have list of strings looks

name=['jack','sam','terry','sam','henry',.......] 

i want create newlist logic shown below. want go every entry in name , assign number if entry seen first time. if being repeated(as in case 'sam') want assign corresponding number, include in newlist , continue.

newlist = [] name[1] = 'jack' jack = 1  newlist = ['jack'] name[2] = 'sam' sam = 2  newlist = ['jack','sam'] name[3] = 'terry' terry = 3  newlist = ['jack','sam','terry'] name[4] = 'sam' sam = 2  newlist = ['jack','sam','terry','sam'] name[5] = 'henry' henry = 5  newlist = ['jack','sam','terry','sam','henry'] 

i know can done

u,index = np.unique(name,return_inverse=true) 

but me important loop through individual entries of list name , keep logic above. can me this?

try using dict , checking if keys paired value:

name = ['jack','sam','terry','sam','henry'] vals = {} = 0 entry in name:     if entry not in vals:         vals[entry] = + 1     += 1 print vals  

result:

{'henry': 5, 'jack': 1, 'sam': 2, 'terry': 3}

elements can accessed "index" (read: key) list, except "index" whatever key is; in case, keys names.

>>> vals['henry'] 5 

edit: if order important, can enter items dict using number key: in way, know owner based on number:

name = ['jack','sam','terry','sam','henry'] vals = {} = 0 entry in name:     #check if entry repeat     if entry not in name[0:i]:         vals[i + 1] = entry     += 1   print (vals) print (vals[5]) 

this code uses order in appear key. make sure don't overwrite or create duplicates, checks if current name has appeared before in list (anywhere 0 i, current index in name list).

in way, still in "sorted order" want. instead of accessing items name of owner index number. give order desire example.

result:

>>> vals {1: 'jack', 2: 'sam', 3: 'terry', 5: 'henry'} >>> vals[5] 'henry' 

Comments