Python Itertools-Modul

Das Modul itertools ist eine Sammlung von Werkzeugen, die darauf abzielen, schnell und speichereffizient zu sein, wenn mit Iteratoren (wie Listen oder Dictionaries) gearbeitet wird.

Aus der Python 3 Dokumentation

Das Modul standardisiert einen Kernsatz schneller, speichereffizienter Werkzeuge, die für sich allein oder in Kombination nützlich sind. Zusammen bilden sie eine „Iterator-Algebra“, die es ermöglicht, spezialisierte Werkzeuge prägnant und effizient in reinem Python zu konstruieren.

Das Modul itertools ist Teil der Standardbibliothek und muss importiert werden. Einige Beispiele verwenden auch das operator-Modul.

import itertools
import operator

accumulate()

Erstellt einen Iterator, der die Ergebnisse einer Funktion zurückgibt.

itertools.accumulate(iterable[, func])

Beispiel:

data = [1, 2, 3, 4, 5]
# Akkumulieren mit Multiplikationsfunktion
result = itertools.accumulate(data, operator.mul)
for each in result:
    print(each)
1
2
6
24
120

Der operator.mul nimmt zwei Zahlen und multipliziert sie:

operator.mul(1, 2)
# 2

operator.mul(2, 3)
# 6

operator.mul(6, 4)
# 24

operator.mul(24, 5)
# 120

Das Übergeben einer Funktion ist optional:

data = [5, 2, 6, 4, 5, 9, 1]
# Akkumulieren ohne Funktion standardmäßig Addition
result = itertools.accumulate(data)
for each in result:
    print(each)
5
7
13
17
22
31
32

Wenn keine Funktion angegeben wird, werden die Elemente summiert:

5
5 + 2 = 7
7 + 6 = 13
13 + 4 = 17
17 + 5 = 22
22 + 9 = 31
31 + 1 = 32

combinations()

Nimmt ein Iterable und eine ganze Zahl. Dies erzeugt alle eindeutigen Kombinationen, die aus r Elementen bestehen.

itertools.combinations(iterable, r)

Beispiel:

shapes = ['circle', 'triangle', 'square',]
# Alle Kombinationen von 2 Elementen generieren
result = itertools.combinations(shapes, 2)
for each in result:
    print(each)
('circle', 'triangle')
('circle', 'square')
('triangle', 'square')

combinations_with_replacement()

Genau wie combinations(), erlaubt aber, dass einzelne Elemente mehr als einmal wiederholt werden.

itertools.combinations_with_replacement(iterable, r)

Beispiel:

shapes = ['circle', 'triangle', 'square']
# Kombinationen generieren, die Wiederholungen erlauben
result = itertools.combinations_with_replacement(shapes, 2)
for each in result:
    print(each)
('circle', 'circle')
('circle', 'triangle')
('circle', 'square')
('triangle', 'triangle')
('triangle', 'square')
('square', 'square')

count()

Erstellt einen Iterator, der gleichmäßig beabstandete Werte zurückgibt, beginnend mit der Zahl start.

itertools.count(start=0, step=1)

Beispiel:

# Zählen beginnend bei 10, inkrementierend um 3
for i in itertools.count(10,3):
    print(i)
    if i > 20:
        break
10
13
16
19
22

cycle()

Diese Funktion durchläuft ein Iterable endlos.

itertools.cycle(iterable)

Beispiel:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'violet']
# Endlos durch Farben zyklisch durchlaufen
for color in itertools.cycle(colors):
    print(color)
red
orange
yellow
green
blue
violet
red
orange

Wenn das Ende des Iterables erreicht ist, beginnt es wieder von vorne.

chain()

Nimmt eine Reihe von Iterables und gibt sie als ein langes Iterable zurück.

itertools.chain(*iterables)

Beispiel:

colors = ['red', 'orange', 'yellow', 'green', 'blue']
shapes = ['circle', 'triangle', 'square', 'pentagon']
# Mehrere Iterables zu einem verketten
result = itertools.chain(colors, shapes)
for each in result:
    print(each)
red
orange
yellow
green
blue
circle
triangle
square
pentagon

compress()

Filtert ein Iterable anhand eines anderen.

itertools.compress(data, selectors)

Beispiel:

shapes = ['circle', 'triangle', 'square', 'pentagon']
selections = [True, False, True, False]
# Formen basierend auf booleschen Auswahlen filtern
result = itertools.compress(shapes, selections)
for each in result:
    print(each)
circle
square

dropwhile()

Erstellt einen Iterator, der Elemente aus dem Iterable verwirft, solange das Prädikat wahr ist; danach gibt er jedes Element zurück.

itertools.dropwhile(predicate, iterable)

Beispiel:

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1]
# Elemente verwerfen, solange die Bedingung wahr ist, dann alle verbleibenden zurückgeben
result = itertools.dropwhile(lambda x: x<5, data)
for each in result:
    print(each)
5
6
7
8
9
10
1

filterfalse()

Erstellt einen Iterator, der Elemente aus dem Iterable filtert und nur diejenigen zurückgibt, für die das Prädikat Falsch ist.

itertools.filterfalse(predicate, iterable)

Beispiel:

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1]
# Elemente zurückgeben, für die das Prädikat Falsch ist
result = itertools.filterfalse(lambda x: x<5, data)
for each in result:
    print(each)
5
6
7
8
9
10

groupby()

Einfach ausgedrückt gruppiert diese Funktion Elemente zusammen.

itertools.groupby(iterable, key=None)

Beispiel:

robots = [
    {"name": "blaster", "faction": "autobot"},
    {"name": "galvatron", "faction": "decepticon"},
    {"name": "jazz", "faction": "autobot"},
    {"name": "metroplex", "faction": "autobot"},
    {"name": "megatron", "faction": "decepticon"},
    {"name": "starcream", "faction": "decepticon"},
]
# Roboter nach Fraktion gruppieren (Iterable muss für korrekte Gruppierung sortiert sein)
for key, group in itertools.groupby(robots, key=lambda x: x['faction']):
    print(key)
    print(list(group))
autobot
[{'name': 'blaster', 'faction': 'autobot'}]
decepticon
[{'name': 'galvatron', 'faction': 'decepticon'}]
autobot
[{'name': 'jazz', 'faction': 'autobot'}, {'name': 'metroplex', 'faction': 'autobot'}]
decepticon
[{'name': 'megatron', 'faction': 'decepticon'}, {'name': 'starcream', 'faction': 'decepticon'}]

islice()

Diese Funktion ähnelt stark Slices. Sie ermöglicht es, einen Teil eines Iterables auszuschneiden.

itertools.islice(iterable, start, stop[, step])

Beispiel:

colors = ['red', 'orange', 'yellow', 'green', 'blue',]
# Iterable slicen, um die ersten 2 Elemente zu erhalten
few_colors = itertools.islice(colors, 2)
for each in few_colors:
    print(each)
red
orange

permutations()

itertools.permutations(iterable, r=None)

Beispiel:

alpha_data = ['a', 'b', 'c']
# Alle Permutationen der Elemente generieren
result = itertools.permutations(alpha_data)
for each in result:
    print(each)
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

product()

Erstellt das kartesische Produkt aus einer Reihe von Iterables.

num_data = [1, 2, 3]
alpha_data = ['a', 'b', 'c']
# Kartesisches Produkt der Iterables generieren
result = itertools.product(num_data, alpha_data)
for each in result:
    print(each)
(1, 'a')
(1, 'b')
(1, 'c')
(2, 'a')
(2, 'b')
(2, 'c')
(3, 'a')
(3, 'b')
(3, 'c')

repeat()

Diese Funktion wiederholt ein Objekt immer wieder. Es sei denn, es gibt ein times-Argument.

itertools.repeat(object[, times])

Beispiel:

# Objekt 3 Mal wiederholen
for i in itertools.repeat("spam", 3):
    print(i)
spam
spam
spam

starmap()

Erstellt einen Iterator, der die Funktion unter Verwendung von Argumenten berechnet, die aus dem Iterable stammen.

itertools.starmap(function, iterable)

Beispiel:

data = [(2, 6), (8, 4), (7, 3)]
# Funktion auf entpackte Argumente aus jedem Tupel anwenden
result = itertools.starmap(operator.mul, data)
for each in result:
    print(each)
12
32
21

takewhile()

Das Gegenteil von dropwhile(). Erstellt einen Iterator und gibt Elemente aus dem Iterable zurück, solange das Prädikat wahr ist.

itertools.takewhile(predicate, iterable)

Beispiel:

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1]
# Elemente nehmen, solange die Bedingung wahr ist, dann stoppen
result = itertools.takewhile(lambda x: x<5, data)
for each in result:
    print(each)
1
2
3
4

tee()

Gibt n unabhängige Iteratoren aus einem einzigen Iterable zurück.

itertools.tee(iterable, n=2)

Beispiel:

colors = ['red', 'orange', 'yellow', 'green', 'blue']
# Iterable in zwei unabhängige Iteratoren aufteilen
alpha_colors, beta_colors = itertools.tee(colors)
for each in alpha_colors:
    print(each)
red
orange
yellow
green
blue
colors = ['red', 'orange', 'yellow', 'green', 'blue']
alpha_colors, beta_colors = itertools.tee(colors)
for each in beta_colors:
    print(each)
red
orange
yellow
green
blue

zip_longest()

Erstellt einen Iterator, der Elemente aus jedem der Iterables aggregiert. Wenn die Iterables ungleiche Längen haben, werden fehlende Werte mit fillvalue aufgefüllt. Die Iteration wird fortgesetzt, bis das längste Iterable erschöpft ist.

itertools.zip_longest(*iterables, fillvalue=None)

Beispiel:

colors = ['red', 'orange', 'yellow', 'green', 'blue',]
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,]
# Iterables zusammenfügen und fehlende Werte mit None auffüllen
for each in itertools.zip_longest(colors, data, fillvalue=None):
    print(each)
('red', 1)
('orange', 2)
('yellow', 3)
('green', 4)
('blue', 5)
(None, 6)
(None, 7)
(None, 8)
(None, 9)
(None, 10)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.