Python Itertools-Functies die Iterators maken voor efficiënte looping.

Python Itertools:
Deze module standaardiseert een kernset van snelle, geheugenefficiënte tools die op zichzelf of in combinatie nuttig zijn. Samen vormen ze een "iterator algebra”
die het mogelijk maakt om gespecialiseerde tools beknopt en efficiënt te bouwen in pure Python.
Python itertools module is beschikbaar in de Python Standaard Bibliotheek.
Typen Iterators die deze module biedt:
- oneindige Iterators
- Iterators die eindigen op de kortste invoer-reeks
- combinatorische iterators
Het terugkerende type zal een Iterator object zijn.We kunnen de iterator doorlopen door
- functie next() te gebruiken
- for-lus te gebruiken
- om te zetten in een lijstobject met list()
Oneindige iteratoren:
telling(),cyclus(),herhaling()
- telling():
Maakt een iterator die gelijkmatig verdeelde waarden retourneert, beginnend met het aantal dat is opgegeven in het argument start.Standaard is start 0 en stap 1.Stap kan ook niet-gehele waarden zijn.Deze functie retourneert een oneindige iterator.
itertools.count(start=0,step=1)
Het wordt ook gebruikt als argument in map() en zip() functie.
zip()
De functie zip() is een ingebouwde Python-functie waarmee overeenkomstige elementen uit meerdere reeksen kunnen worden gecombineerd en een zip-object kan worden teruggegeven dat een iterator van tupels is. itertools.count()
kan worden gebruikt als sequentie in zip() functie.
map()
-Python map()-functie wordt gebruikt om functie toe te passen op alle elementen in de opgegeven iterable en geeft een map-object terug dat een iterator is. We kunnen itertools.count() als argument in de map() functie gebruiken.
2. cycle():
Maakt een iterator die elementen uit de iterable terughaalt en van elk een kopie opslaat.Wanneer de iterable is uitgeput, keert het element terug van de opgeslagen kopie. Herhaalt zich oneindig.
itertools.cycle(iterable)
3.repeat():
Maakt een iterator die steeds opnieuw een object teruggeeft.Draait oneindig door, tenzij keer argument wordt genoemd.
Gebruikt als argument in map() en zip() functie.
itertools.repeat(object,times)
Het wordt gebruikt als argument in de map() functie.
Het wordt gebruikt als een argument in de functie zip().
Iteratoren die eindigen op de kortste invoerreeks:
- accumulate():
Maakt een iterator die geaccumuleerde som of geaccumuleerde resultaten van andere binaire functies retourneert die in func-parameter worden genoemd.
Normaal komt het aantal elementen in de output iterable overeen met het aantal elementen in de input iterable. Als initial-parameter wordt genoemd, wordt deze geaccumuleerd, zodat de output iterable één element meer bevat dan de input iterable.functools.reduce()
geeft alleen de uiteindelijke geaccumuleerde waarde voor soortgelijke functie.
initiële parameter wordt geïntroduceerd inPython version 3.8
itertools.accumulate(iterable,func,*,initial=None)
2. chain():
Maakt een iterator die elementen uit de eerste iterable retourneert totdat deze zijn uitgeput, en gaat dan verder met de volgende iterable. Opeenvolgende reeksen worden als een enkele reeks behandeld.itertools.chain(*iterables)
3. chain.from_iterable():
Deze functie neemt een iterable als invoerargument en geeft een afgevlakte iterable terug die alle elementen in de invoer-iterable bevat. Alle elementen in de input iterable moeten iterable zijn, anders geeft het TypeError.
chain.from_iterable(iterable)
4. compress():
Maak een iterator die elementen uit de gegevens filtert en alleen die elementen terugzendt die een corresponderend element in de selectors hebben dat op Waar evalueert.Stopt wanneer de iterables voor data of selectors zijn uitgeput.
itertools.compress(data,selectors)
5.dropwhile():
Maak een iterator die elementen uit de iterable laat vallen zolang het predikaat waar is, en daarna elk element teruggeeft. De iterator produceert geen uitvoer totdat het predikaat voor het eerst onwaar wordt.
itertools.dropwhile(predicate,iterable)
6.takewhile():
Maak een iterator die elementen uit de iterable teruggeeft zolang het predikaat True is.
itertools.takewhile(predicate,iterable)
7. filterfalse():
Maak een iterator die elementen uit de iterable filtert en alleen die teruggeeft waarvoor het predikaat False is.Als het predikaat Geen is, retourneert de methode items die False zijn.filter()
De methode retourneert een iterator die elementen bevat van een iterable waarvoor de functie True retourneert.
itertools.filterfalse(predicate,iterables)
8.zip_longest():
Maakt een iterator die elementen van elk van de iterables bij elkaar optelt. Als iterabelen van ongelijke lengte zijn, wordt de ontbrekende waarde opgevuld met de vulwaarde. De iteratie gaat door totdat de langste iterable op is.
In zip(), gaat de iteratie door totdat de kortste iterable op is.
itertools.zip_longest(*iterables,fillvalue=None)
9. starmap():
Maak een iterator die de functie berekent met argumenten die uit de iterable zijn verkregen. Wordt gebruikt in plaats van map() als de argumentparameters al zijn gegroepeerd in tupels uit een enkele iterable (de gegevens zijn “voorgepakt”).
itertools.starmap(function,iterable)
10. islice():
Maakt een iterator die geselecteerde elementen uit de iterable teruggeeft. Als start None
is, dan begint de iteratie bij nul. Als stap None
is, dan is de stap standaard één. Als stop None
is, dan gaat de iteratie door totdat de iterator is uitgeput, als dat al het geval is; anders stopt de iteratie op de opgegeven positie. islice()
ondersteunt geen negatieve waarden voor start, stop en stap.
itertools.islice(iterable,stop)
itertools.islice(iterable, start, stop)
11.tee():
Haalt n onafhankelijke iteratoren uit een enkele iterabele.
itertools.tee(iterable,n=2)
12. groupby():
Maak een iterator die opeenvolgende sleutels en groepen uit de iterable teruggeeft.
key is een functie die de waarde van de sleutel voor elk element berekent.Als sleutel niet is opgegeven of Geen is, gaat sleutel standaard uit van een identiteitsfunctie en geeft het element ongewijzigd terug.
itertools.groupby(iterable,key=None)
Combinatorische iteratoren:
- product():
Cartesisch product van ingevoerde iterabelen.
De definitie van een cartesisch product: Het product van verzameling X en verzameling Y is de verzameling die alle geordende paren ( x, y ) bevat waarvoor x tot X behoort en y tot Y.
Om het product van een iterable met zichzelf te berekenen, geef het aantal herhalingen op met het optionele repeat keyword argument. Bijvoorbeeld, product(A, repeat=4) betekent hetzelfde als product(A, A, A, A).
itertools.product(*iterables,repeat)
2. permutaties():
Retourneer opeenvolgende r
lengte permutaties van elementen in de iterable. Als r niet is opgegeven of Geen is, dan is r standaard de lengte van de iterable en worden alle mogelijke permutaties van volledige lengte gegenereerd. De permutatietupels worden gegenereerd in lexicografische volgorde volgens de volgorde van de input iterable. Dus, als de input iterable gesorteerd is, zullen de combinatie-tupels in gesorteerde volgorde worden gegenereerd.
Elementen worden als uniek behandeld op basis van hun positie, niet op basis van hun waarde. Dus als de invoerelementen uniek zijn, worden de waarden in elke permutatie niet herhaald.
itertools.permutations(iterable,r=None)
Note:In permutaties is de volgorde van de elementen van belang.
3. combinaties():
Return r
lengte subsequenties van elementen uit de input iterable.
De combinatie-tupels worden in lexicografische volgorde uitgegeven, volgens de volgorde van de input iterable. Dus, als de input iterable gesorteerd is, zullen de combinatie tupels worden geproduceerd in gesorteerde volgorde.
Lexicografisch ordenen betekent de manier van het ordenen van woorden in alfabetische volgorde van hun samenstellende letters.
Elementen worden als uniek behandeld op basis van hun positie, niet op basis van hun waarde. Dus als de invoerelementen uniek zijn, zullen er geen herhaalde waarden zijn in elke combinatie.
itertools.combinations(iterable, r)
4. combinaties_met_vervanging():
Return r
lengte opeenvolgingen van elementen uit de invoer iterable waardoor individuele elementen meer dan eens kunnen worden herhaald.
itertools.combinations_with_replacement(iterable, r)
Note:
1. Used as an argument in map() and zip():
count(),repeat()
repeat()- supply stream of constant values to map() or zip() function.
count()-it will supply different values to map() or zip() function.2.Difference between cycle() and repeat():
cycle()-iterates over the same object again and again
repeat()-returns the same object again and again.3.Difference between reduce() and itertools.accumulate():
reduce():
* It will return only the final accumulated value.
* First argument should be function and second argument should be iterable.
accumulate()
* It will return the running accumulated value.The elements in the output iterable will be equal to elements in the input iterable,if initial value is not mentioned.
* First argument should be iterable and second argument should be function.4.Difference between filter() and itertools.compress():
* filter()function-filters the given iterable with the help of function that test each element in the iterable is True or not.
* compress():filters the given iterable based on the corresponding element in the selector. Iterable containing True /False is given as selector.5.Difference between filter() and itertools.filterfalse():
*filter():Construct an iterator from the elements of iterable for which function returns True.
*filterfalse():Construct an iterator from the elements of iterable for which function returns False.6.Difference between zip() and itertools.zip_longest():
*zip():Iteration continues until shortest iterable is exhausted.
*zip_longest():Iteration continues until longest iterable is exhausted.7.Difference between list slicing and itertools.islice():
*List slicing creates new list
*islice()-Returns an iterator.We can loop through the iterator,in the way we want.
8.Difference between itertools.permutations() and itertools.combinations():
* itertools.permutations():Order of the elements does matters.
*itertools.combinations():Order of the elements doesn’t matters.
Both combinations and permutations doesn’t repeat values.
9.Difference between itertools.combinations() and itertools.combinations_with_replacement
* combinations():Order of element doesn’t matters and doesn’t repeat values.
* combinations_with_replacement():Order of element doesn’t matters and it repeats values.10.Difference between itertools.takewhile() and itertools.dropwhile():
* takewhile():Make an iterator that returns element from the iterable as long as the predicate is True.
* dropwhile():Make an iterator that drops element from the iterable as long as the predicate is True afterwards returns every element.