functools.reduce
- Python kursu
- İleri seviye
- Ders 5/83
- 5 dk
functools.reduce ile akümülasyonu öğrenirsin.
functools.reduce
functools.reduce, bir diziyi tek bir değere katlar (fold). İki argümanlı bir fonksiyonu art arda uygular: her adımda birikmiş değer ile sıradaki elemanı birleştirir.
Söz dizimi: reduce(fn, seq, initial). fn(accumulator, item) çağrısı her eleman için yapılır.
from functools import reduce
nums = [1, 2, 3, 4]
total = reduce(lambda a, b: a + b, nums, 0)
print(total) # 10Başlangıç değeri verilmezse dizinin ilk elemanı kullanılır. Boş diziye başlangıç değeri vermek güvenlidir.
reduce ile çarpım ve zincir
reduce yalnızca toplama yaramaz. Çarpım için lambda a, b: a * b kullanırsın; başlangıç 1 olmalıdır (çünkü 1 çarpmanın birim elemanıdır).
Başlangıç değeri seçimi önemlidir: toplama için 0, çarpmaya için 1, dize birleştirmeye için "" kullanılır. Yanlış başlangıç değeri sonucu bozar.
Boş diziye başlangıç değeri verilmezse reduce TypeError fırlatır. Bu yüzden güvenli kod daima başlangıç değeri içerir.
Uygulama reduce ile çarpım hesapla
nums = [2, 3, 4] listesinin çarpımını reduce ile hesapla. Birleştirici lambda a, b: a * b olsun; başlangıç değeri 1 ver. Sonucu print() ile yazdır.
Başlangıç kodu
from functools import reduce
nums = [2, 3, 4]
# reduce ile çarpma birleştirici ve başlangıç 1 kullan
# sonucu ekrana yazdırÖrnek çözüm
from functools import reduce
nums = [2, 3, 4]
result = reduce(lambda a, b: a * b, nums, 1)
print(result)Beklenen çıktı
24
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 reduce çağrısını tamamla
from functools import reduce
nums = [1, 2, 3, 4]
total = ____(lambda a, b: a + b, nums, 0)
print(total)
from functools import reduce
nums = [1, 2, 3, 4]
total = reduce(lambda a, b: a + b, nums, 0)
print(total)
Açıklama: reduce(lambda a, b: a+b, nums, 0) diziyi toplama katlar; sonuç 10 olur.
2 reduce adımlarını eşleştir
| Kavram | Anlamı |
|---|---|
fn(accumulator, item) |
Her adımın çağrısı |
initial=0 |
Başlangıç birikimi |
lambda a, b: a+b |
Toplama birleştirici |
reduce |
Fold işlemi |
3 Çarpım için reduce başlangıç değeri ne olmalı?
- 1 Doğru cevap
- 0
- Boş dize ""
- None
Açıklama: 1 çarpmanın birim elemanıdır; başlangıç 1 olursa sonuç doğru çıkar.