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_iongest() — 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: |