def eleman_ekleyici(eleman, liste_listesi): # liste icindeki her listeye elemani ekler
if liste_listesi == []:
return []
else:
return [liste_listesi[0] + [eleman]] + eleman_ekleyici(eleman, liste_listesi[1:])
def altKumeler(liste):
if len(liste) == 0:
return [[]]
else:
return altKumeler(liste[:-1]) + eleman_ekleyici(liste[-1], altKumeler(liste[:-1]))
# ornek
# print(sorted(altKumeler(["a","b","c"])))
# >>> [[], ['a'], ['a', 'b'], ['a', 'b', 'c'], ['a', 'c'], ['b'], ['b', 'c'], ['c']]
eleman ekleyicide sıkıntyı yok ama sorun şu altKumeler fonksiyonunun nasıl bir mantıkla çalıştığını tam olarak kavrayamadım anlatırmısınız
Iki fonksiyon da ayni sekilde calisiyor; biri bastan digeri kictan calisiyor sadece.
1 Beğeni
Maalesef anlayamadım daha açıklayıcı olabilir misiniz mesela [a,b,c] için fonksiyon nasıl çalışıyor
Şu örnek acaba anlamanıza yardımcı olur mu?
def ic_ice_listeleri_yok_et(arr: list = []):
result = []
for i, j in enumerate(arr):
if isinstance(j, list):
return arr[:i] \
+ ic_ice_listeleri_yok_et(j) \
+ ic_ice_listeleri_yok_et(arr[i + 1:])
else:
result.append(j)
return result
a = [["a"], "b", [[["c"]]], "d"]
print(ic_ice_listeleri_yok_et(a))
Öz-yinelemede yapılan işlem aslında şu:
- Eğer listede sırası gelen elemanın tipi bir listeyse o elemanın sırasına kadar olan elemanları olduğu gibi al
- Tipi liste olan elemanı öz-yinelemeli bir şekilde al
- Geri kalan elemanlar da bir liste içinde olacağı için onları da öz-yinelemeli bir şekilde al ve sonucu geri döndür.
yardımlarınız için teşekkürler
Böyle durumlarda belirli yerlerde ekrana değişkenlerinizi yazarsanız olan biteni anlamanız da kolaylaşır diye düşünüyorum:
from copy import deepcopy
def eleman_ekleyici(eleman, liste_listesi): # liste icindeki her listeye elemani ekler
if liste_listesi == []:
return []
else:
liste_listesi = deepcopy(liste_listesi)
for i in liste_listesi: # liste listesi?
i.append(eleman)
print("eleman ekleyici fonksiyonunun sonucu:", liste_listesi)
return liste_listesi
## return [liste_listesi[0] + [eleman]] + eleman_ekleyici(eleman, liste_listesi[1:])
def altKumeler(liste):
print("altKumeler fonksiyonunda özyineleme başladı:", liste)
if liste:
r = altKumeler(liste[:-1])
sonuç = r + eleman_ekleyici(liste[-1], r)
print("altKumeler fonksyonunda özyinelemeden çıkılıyor:", sonuç)
return sonuç
else:
print("altKumeler fonksyonunda özyinelemeden çıkılıyor:", [[]])
return [[]]
print("\n", sorted(altKumeler(["a","b","c"])), sep = "")
1 Beğeni