Python liste içindeki listedeki int elemanları toplamak

selamlar yeni yeni python öğreniyorum sorum şu
liste= [12,3,4,“ali”,[“mustafa”,12],[“yasin”,3],2,“selim”] şöyle bir listede sadece liste içindeki intleri toplayabiliyorum ama liste içindeki diğer listelerdeki intleri göremiyorum bunu nasıl yapabilirim

yani intleri topladığımda sonucun 36 olması gerekirken 21 oluyor

Bunu nasıl yaptığını görebilir miyiz?

liste= [12,3,4,"ali",["mustafa",12],["yasin",3],2,"selim"] 

toplam= []
for i in liste:
     if type(i)== int:
             toplam.append(i)
for i in liste[4]:
      if type(i)== int:
             toplam.append(i)
for i in liste[5]:
      if type(i)== int:
             toplam.append(i)

print(f"Sayıların toplamı: {sum(toplam)}")      

Ben bu şekilde bir kod yazdım, önce listeyi genel olarak tarayıp değeri int olanları toplam adlı listeye ekliyor(bu toplam listesinin içine yazdığımız değerleri en son toplayacağız). Aynı şekilde listenin 4.indeksindeki yani [“Mustafa”, 12] listesini de for ile tarayıp gene değeri int olanları toplam listesine ekliyorum. Son olarak aynı işlemi listenin 5.elemanı olan [“yasin”, 3] için de aynı şeyleri uyguluyorum ve en sonunda, sum metodu ile toplam listesi içine eklediğim değerleri topluyorum. Sum metodu ile bir listedeki int değerleri toplayabilirsin.Ve sonuç böylece 36 oluyor.

çok teşekkür ederim bu gayet yeterli oldu elinize sağlık

1 Beğeni

@dolpsoft 'un yazdığı doğru fakat sadece bu durumda geçerlidir. eğer tüm durumlarda çalışacak bir algoritma düşünüyorsan, o zaman bu soruyu recursion kullanarak çözmeni öneririm. hatta tam recursion öğrenildiğinde kullanılan sorulardan birisi bu.

class sumLists():
    def __init__(self, list):
        self.sum = 0
        self.flatPrint(list)


    def flatPrint(self, myList):              
        for thing in myList:            
            if isinstance(thing, list): 
                self.flatPrint(thing)        
            else:                       
                if isinstance(thing, int):
                    self.sum += thing

a = sumLists([12,3,4,"ali",["mustafa",12],["yasin",3],2,"selim"])
print(a.sum) # 36

edit: eğer ki ilerleyen zamanlarda listede int dışı float gibi değerlerin olursa, ve bu değerleri de toplamak istersen, isinstance() fonksiyoun içerisinde tuple veya list formatında birde fazla data type yazarak bu değerleri de toplama işleminde ekleyebilirsin.

3 Beğeni

Kodu daha modüler yazabiliriz, sınıfa da gerek yok:

from numbers import Number

def flatten(iterable):
    for i in iterable:
        if isinstance(i, (list, tuple)):
            yield from flatten(i)
        else:
            yield i

liste = [12,3,4,"ali",["mustafa",12],["yasin",3],2,"selim"]

print(sum(filter(lambda i: isinstance(i, Number), flatten(liste))))
2 Beğeni

okunurluk ve anlasilirlik acisinda class yapisinda yazdim. diger turlu en son satir ozellikle pek alasilmiyor olabilir.

2 Beğeni