Python'da, reduc(), belirli bir işlevi yinelenebilir öğelerine uygulayan ve onları tek bir değere indirgeyen yerleşik bir işlevdir.
Reduc()'un sözdizimi aşağıdaki gibidir:
functools.reduce(function, iterable[, initializer])
- fonksiyon argümanı iki argüman alan ve tek bir değer döndüren bir fonksiyondur. İlk argüman birikmiş değerdir ve ikinci argüman yinelenebilirden geçerli değerdir.
- yinelenebilir argüman azaltılacak değerlerin dizisidir.
- İsteğe bağlı başlatıcı bağımsız değişkeni, birikmiş sonuç için bir başlangıç değeri sağlamak üzere kullanılır. Herhangi bir başlatıcı belirtilmemişse, yinelenebilir öğenin ilk öğesi başlangıç değeri olarak kullanılır.
Bir sayı listesinin toplamını bulmak için reduc() işlevinin nasıl kullanılacağını gösteren bir örnek:
# Examples to understand the reduce() function from functools import reduce # Function that returns the sum of two numbers def add(a, b): return a + b # Our Iterable num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # add function is passed as the first argument, and num_list is passed as the second argument sum = reduce(add, num_list) print(f'Sum of the integers of num_list : {sum}') # Passing 10 as an initial value sum = reduce(add, num_list, 10) print(f'Sum of the integers of num_list with initial value 10 : {sum}')
Çıktı:
Sum of the integers of num_list : 55 Sum of the integers of num_list with initial value 10 : 65
Bu örnekte, sayılar listesindeki her öğe çiftine iki değerin toplamını döndüren ve tüm öğelerin toplamını veren bir ekleme işlevi uygulamak için reduc() işlevini kullanıyoruz.
Reduce() fonksiyonunun ilk argümanı olarak lambda fonksiyonunu kullanalım:
# Importing reduce function from functools from functools import reduce # Creating a list my_list = [1, 2, 3, 4, 5] # Calculating the product of the numbers in my_list # using reduce and lambda functions together product = reduce(lambda x, y: x * y, my_list) # Printing output print(f'Product = {product}') # Output : Product = 120
Şimdi nasıl olduğunu açıklayalım azaltmak() işlev verilen örnekte çalışır:
java'da excel dosyasını oku
Reduc() fonksiyonu iki argüman alır: bir fonksiyon ve yinelenebilir bir argüman. Bu durumda, fonksiyon olarak lambda x, y: x * y lambda fonksiyonunu ve yinelenebilir olarak sayılar listesini kullanırız.
- Lambda işlevi x ve y değişkenlerini kabul eder, bunları çarpar ve sonucu döndürür. Lambda işlevi ilk çalıştırıldığında, x ve y değişkenleri sırasıyla my_list'in birinci ve ikinci öğelerine ayarlanır (yani, x = 1 ve y = 2). Lambda işlevi bu iki sayıyı çarpar ve sonucu verir (1 * 2 = 2).
- Lambda işlevi ikinci kez çağrıldığında, x, önceki çağrının sonucuna (x = 2) ve y, sayılar listesinin üçüncü öğesine (yani, y = 3) ayarlanır. Bu iki değeri çarpar ve sonucu verir (2 * 3 = 6).
- Lambda işlevi, tüm öğeler işlenene kadar my_list'teki her öğe için bu şekilde tekrar tekrar çağrılır. Reduce() işlevi, listenin tüm öğelerinin çarpımını döndürür ve bu daha sonra ürün değişkenine 120 olarak atanır. Bu çarpım şu şekilde hesaplanır: ((((1 * 2) * 3)* 4)* 5) = 120.
- Son olarak, çıktı olarak 120 sonucunu veren print() fonksiyonunu kullanarak ürün değişkeninin değerini yazdırırız.
operatör işlevleriyle azalt() işlevi
Lambda fonksiyonları yerine operatör fonksiyonlarını kullanarak kodumuzu daha özlü ve okunması kolay hale getirebiliriz.
Azaltma fonksiyonunun ilk argümanı olarak operatör fonksiyonlarının kullanımını gösteren bir örnek:
# Python program to demonstrate # how to use operator functions with reduce function # Importing reduce function from functools import reduce # Importing operator import operator # Creating lists my_list1 = [1, 2, 3, 4, 5] my_list2 = ['I', 'Love', 'Javatpoint'] # Calculating the sum of the numbers of my_list1 # using reduce and operator.add sum = reduce(operator.add, my_list1) # Calculating the product of the numbers of my_list1 # using reduce and operator.mul product = reduce(operator.mul, my_list1) # Concatenating all the elements in my_list2 # using reduce and operator.concat concated_str1 = reduce(operator.concat, my_list2) # We can achieve the same output by using operator.add concated_str2 = reduce(operator.add, my_list2) # Printing result print(f'Sum of all elements in my_list1 : {sum}') print(f'Product of all elements in my_list1 : {product}') print(f'Concatenated string by using operator.concat : {concated_str1}') print(f'Concatenated string by using operator.add : {concated_str2}')
Çıktı:
Sum of all elements in my_list1 : 15 Product of all elements in my_list1 : 120 Concatenated string by using operator.concat : ILoveJavatpoint Concatenated string by using operator.add : ILoveJavatpoint
Bu kod, Python'da yinelenebilirler üzerinde matematiksel ve dize işlemleri gerçekleştirmek için reduc() işlevinin ve operatör işlevlerinin nasıl kullanılacağını gösterir.
alt çizgi
azalt () ve biriktir () işlevleri arasındaki farkı anlamak:
Python functools modülü, her ikisi de yinelenebilirler üzerinde karşılaştırılabilir şekillerde çalışan azalt() ve biriktirme() işlevlerini sağlar.
- azaltmak () Ve biriktirmek () işlevleri, her ikisinin de iki argümanı kabul etmesi açısından benzerdir: yinelenebilir olanın kendisi ve üzerinde gerçekleştirilecek işlemi tanımlayan bir işlev. Ancak operasyonun sonuçlarını ele alma biçimleri birbirlerinden en çok farklılaştığı noktadır.
- azaltmak () işlevi, sonuç ve sonraki öğe üzerinde aynı işlemi çalıştırmadan önce yinelenebilir öğenin ilk iki öğesi üzerinde işlem yapar. Bu işlem yinelenebilir öğelerin tümü işlenene kadar tekrarlanır. İşlemin son çıktısı tek bir sonuç olarak döndürülür.
- iken biriktirmek () işlevi, sonuç ve sonraki öğeler üzerinde aynı işlemi gerçekleştirmeden önce işlemi yinelenebilir öğenin ilk iki öğesine de uygular; akümülasyon() işlevi, işlemin ara sonuçlarını içeren bir yineleyici döndürür. Başka bir deyişle, her öğe ele alındıktan sonra biriktirmek () işlevi, işlemin sonucunu temsil eden bir dizi değer sağlar.
Biriktirme() ve azaltma() arasındaki farkı anlamaya yönelik bir örnek:
# Python Program to demonstrate the difference # between reduce and accumulate # Importing reduce and accumulate function from functools import reduce, accumulate # Creating a list my_list = [1, 2, 3, 4, 5] # Using reduce() to calculate the product of all numbers product = reduce(lambda x, y: x * y, my_list) print(f'Product using reduce() : {product}') # Output: 120 # Using accumulate() to calculate the product of all numbers products = list(accumulate(my_list, lambda x, y: x * y)) print(f'Products using accumulate() : {products}')# Output: [1, 2, 6, 24, 120]
Bu örnekte [1, 2, 3, 4, 5] sayılarından oluşan bir listemiz var. Kullanırız azaltmak() tek bir 120 değeri döndüren tüm sayıların çarpımını hesaplamak için.
Biz de kullanıyoruz biriktirmek() tüm sayıların çarpımını hesaplamak için. Ancak tek bir değer döndürmek yerine, biriktirmek() bir dizi ara sonuç veren bir yineleyici döndürür: [1, 2, 6, 24, 120].
Yani, arasındaki temel fark azaltmak() ve biriktirme() işlevi, azalt() işlevinin, işlemin son çıktısı olan tek bir değeri döndürmesidir. Buna karşılık, birikim() işlevi, bir dizi ara sonuç veren bir yineleyici döndürür.