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
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.
@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.
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))))