8.17.4. Boshqa funksiyalar.
Yuqorida keltirilgan funksiyalardan tashqari, itertools moduli yana bir qator metodlarni oʻz ichiga oladi:
♦ islice() — har bir takrorlashdan soʻng, ketma⁃ketlikning navbatdagi elementini qaytaradi. Bu metod quyidagi usullardan birida yozilishi mumkin:
islice(ketma-ketlik, )
yoki
islice(ketma-ketlik, , [, ])
Oxirgi shaklda agar qadam koʻrsatilmasa, uni 1 ga teng qabul qilinadi. Masalan:
import itertools
print(list(itertools.islice("abcdefgh", 3)))
print(list(itertools.islice("abcdefgh", 3, 6)))
print(list(itertools.islice("abcdefgh", 3, 6, 2)))
♦ starmap(, ) — koʻrsatilgan funksiya qaytargan elementlar asosida ketma-ketlikni shakllantiradi. Boshlangʻich ketma-ketlik elementlari sifatida kortejlar ishtirok etishi zarur va aynan ana shu kortej elementlari ustida funksiya shakllantirilayotgan ketma⁃ketlik uchun qiymatlarni hisoblaydi. Quyida qiymatlar yigʻindisini hisoblash uchun namuna keltirilmoqda:
import itertools
def func1(x, u): return x + u
print(list(itertools. starmap (func1, [(1, 2), (4, 5), (6, 7)])))
def func2(x, y, z) : return x + y + z
print(list (itertools.starmap(func2, [(1, 2, 3), (4, 5, 6)])))
♦ zip_longest() — har bir takrorlash ketma⁃ketlikning bir-biridan bir hil surilgan elementlaridan iborat kortejni qaytaradi. Agar ketma⁃ketliklar turli uzunlikka ega boʻlsa, etishmayotgan element oʻrniga fillvalue parametrida koʻrsatilgan ob`ekt qoʻyiladi. Bu funksiya umumiy koʻrinishda quyidagicha yoziladi:
zip_longest(ketma-ketlik1> [, ..., ketma-ketlikN] [, fillvalue=None])
Masalan:
import itertools
print(list (itertools.zip_longest([1, 2, 3], [4, 5, 6])))
print(list (itertools.zip_longest ([1, 2, 3], [4])))
print(list (itertools.zip_longest ([1, 2, 3], [4], fillvalue=0)))
print(list (zip([1, 2, 3], [4])))
♦ accumulate (ketma-ketlik, ]) — har bir takrorlash joriy element va avvalgi takrorlash natijasi ustida ma’lum bir amalni bajarish orqali olingan natijani qaytaradi. Bajariladigan amal «funksiya» parametrida koʻrsatiladi, agar u koʻrsatilmagan boʻlsa, qoʻshish amali bajariladi. Amal bajaruvchi funksiya ikkita parametrni qabul qilishi va natija qaytarishi zarur. Birinchi takrorlashda doimo uzatilgan ketma⁃ketlikning birinchi elementi qaytariladi:
import itertools
print(list (itertools.accumulate([1, 2, 3, 4, 5, 6])))
def func(x, u): return x * u
print(list (itertools.accumulate ([1, 2, 3, 4, 5, 6], func)))
# [1, 1*2, 2*3, 6*4, 24*5, 120*6]
♦ chain() — har bir takrorlashda dastlab birinchi ketma⁃ketlik elementlarini, keyin ikkinchi va h.k. ketma⁃ketlik elementlarini qaytaradi. Bu funksiya umumiy koʻrinishda quyidagicha yoziladi:
chain ( [, ..., ketma-ketlikN]).
Masalan:
import itertools
arrl, arr2, aggZ = [1, 2, 3], [4, 5], [6, 7, 8, 9]
print(list (itertools.chain (arrl, arr2, aggZ) ))
print(list (itertools.chain("abc", "defg", "hij")))
print(list (itertools. chain ("abc", ["defg", "hij"])))
♦ chain.from_iterable (ketma-ketlik) — bu funksiya chain() oʻxshash, ammo har bir elementi alohida ketma⁃ketlik boʻlgan ketma⁃ketlikni qaytaradi:
import itertools
print(list(itertools.chain.from_iterable(["abc", "defg", "hij"])))
♦ tee([, ]) — ketma⁃ketlik uchun bir nechta bir hil iteratorlardan iborat kortejni qaytaradi. Agar ikkinchi parametr koʻrsatilmagan boʻlsa, u holda ikkita iteratorni oʻz ichiga olgan kortejni qaytaradi:
arr = [1, 2, 3]
print(itertools.tee (arr))
print(list(itertools.tee(arr) [0]))
Do'stlaringiz bilan baham: |