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
Post a Comment