2017-09-04 1 views
2

J'ai cette liste des listes:Ajouter les numéros dans la liste, mais garder les autres éléments

[["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 

Je dois vérifier les chiffres dans la sous-listes et les ajouter, ce que je veux cette sortie:

[["hari","cs",30],["krish","it",10],["yash","nothing",0]] 

Je ne sais pas comment aborder cela.

+0

sont toujours les numéros à la fin de chaque liste? –

+0

oui @StamKaly, vous avez raison sur le modèle. – Gayathri

Répondre

1

Vous pouvez itérer chaque sous-liste et additionner les chiffres (sur la base d'un isinstance contrôle) et de garder les non-nombres comme cela est:

l = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 
newl = [] 
for subl in l: 
    newsubl = [] 
    acc = 0 
    for item in subl: 
     if isinstance(item, (int, float)): 
      acc += item 
     else: 
      newsubl.append(item) 
    newsubl.append(acc) 
    newl.append(newsubl) 
print(newl) 
# [['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing', 0]] 

Si vous aimez les fonctions de générateur cela pourrait être divisé en deux fonctions:

l = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 

def sum_numbers(it): 
    acc = 0 
    for item in it: 
     if isinstance(item, (int, float)): 
      acc += item 
     else: 
      yield item 
    yield acc 

def process(it): 
    for subl in it: 
     yield list(sum_numbers(subl)) 

print(list(process(l))) 
# [['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing', 0]] 
0
d= [["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 

d1=[]    #result 
for x in d:  
    m=[]   #buffer for non int 
    z=0    # int sum temp var 
    for i in x: 
     if str(i).isdigit(): #check if element is an int 
      z+=i 
      #print z 
     else: 
      m.append(i) 
    m.append(z)   #append sum 
    d1.append(m)   #append it to result 
print d1 
0
lists = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 

new_list = [] 
for list_item in lists: 
    new = [] 
    count = 0 
    for item in list_item: 
     if type(item) == int: 
      count = count + item 
     else: 
      new.append(item) 
    new.append(count) 
    new_list.append(new) 

print(new_list) 
0

Essayez ceci:

l = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 
sums = [sum([x for x in _l if type(x) == int]) for _l in l] 
without_ints = map(lambda _l: filter(lambda x: type(x) == int, _l, l)) 
out = [w_i + [s] for (s, w_i) in zip(sums, without_ints)] 
>>> out 
[['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing', 0]] 

J'espère que ça aide!

0

Et voici le plus grand paquebot que j'ai jamais écrit ..

En utilisant les numéros sont à la fin de chaque liste, cela devrait faire l'affaire!

my_list = [["hari","cs",10,20],["krish","it",10],["yash","nothing"]] 

new_list = [[element if type(element) != int else sum(inner_list[inner_list.index(element):]) for element in inner_list if type(inner_list[inner_list.index(element) - 1 if type(element) == int else 0]) != int] for inner_list in my_list] 

print(new_list) # [['hari', 'cs', 30], ['krish', 'it', 10], ['yash', 'nothing']]