Pythons itertools sind ein wenig nützlich zu wissen

Python hat ein Modul namens itertools. Wie der Name schon sagt, handelt es sich um ein Iterator-Dienstprogramm, und manchmal ist es ein wenig nützlich zu wissen. Notieren Sie sich also, was Sie Ihrer Meinung nach verwenden können, zusammen mit einem persönlichen Codebeispiel. Python ist 2.7. Da es möglich ist, äquivalent in die Body-Package-Notation zu schreiben, habe ich versucht, nur diejenigen zusammenzufassen, die den Code prägnant zu machen scheinen. (Möglicherweise gibt es etwas, das präziser geschrieben werden kann. Wenn ja, sagen Sie es mir bitte heimlich.)

Kombinieren Sie mehrere Iteratoren

(Eigentlich habe ich dieses Memo gemacht, weil es diesmal ein wenig bequem war, die Kette zu verwenden.)

from itertools import chain

#Beispiel: a,Ich möchte die Fuga-Eigenschaften jedes Elements von b summieren

#Keine itertools verwendet
hoge = sum(x.fuga for y in (a, b) for x in y)

#verwenden
hoge = sum(x.fuga for x in chain(a, b))

Deckt mögliche Kombinationen ab

from itertools import combinations

#Beispiel:Ich möchte zwei verschiedene Elemente in Array a entwirren
#Ebenso kann es verwendet werden, wenn Sie verschiedene n Elemente entwirren möchten.

#Nicht benutzt
for i in xrange(len(a)):
    for j in xrange(i + 1, len(a)):
        hoge(a[i], a[j])

#Verwenden Sie (i<j ist garantiert)
for i, j in combinations(xrange(len(a)), 2):
    hoge(a[i], a[j])

#Oder
for a1, a2 in combinations(a, 2):
    hoge(a1, a2)

Ich frage mich, ob itertools verwendet oder verschachtelt werden sollen. Persönlich würde ich itertools definitiv verwenden, wenn die Verschachtelung wahrscheinlich dreifach oder mehr ist.

Sie können "Produkt" verwenden, wenn Sie verschiedene Arten von Indizes kombinieren möchten. Zum Beispiel, wenn Sie "hoge (a [i], b [j])" wollen

for i, j in product(xrange(len(a)), xrange(len(b))):
    hoge(a[i], b[j])

#Oder
for ea, eb in product(a, b):
    hoge(ea, eb)

Wird besorgt. Verwenden Sie "Permutationen", um zwischen "Hoge (i, j)" und "Hoge (j, i)" zu unterscheiden. Wenn Sie "hoge (i, i)" zählen möchten, können Sie "product (xrange (len (a)), repeat = 2)" oder "product (a, repeat = 2)" verwenden.

Es scheint nützlich zu sein, weil ich oft Code schreiben muss, um mehrere Listen wie diese persönlich zu lecken.

Sammle die gleiche Klasse

from itertools import groupby

#Beispiel:Schlüssel für Diktat a mit demselben Wert anzeigen

#Nicht benutzt
tmp = {}
for k, v in a.items():
    if v in tmp:
        tmp[v].append(k)
    else:
        tmp[v] = [k]

for k, v in tmp.items():
    print "[%s] has value %s" % (' ,'.join(v), k)

#verwenden
f = lambda k:a[k]
keys = sorted(a.keys(), key=f)
for k, v in groupby(keys, f):
    print "[%s] has value %s" % (' ,'.join(v), k)

Sie müssen einmal sortieren. Auch "list (group by (hoge))" ist nicht möglich.

Andere

Wiederholen Sie einen Iterator auf unbestimmte Zeit

Es ist "wiederholen". Es könnte schön sein, es mit "zip" zu kombinieren.

Recommended Posts

Pythons itertools sind ein wenig nützlich zu wissen
Eine kleine Geschichte, die beim Schreiben von Twilio-Anwendungen mit Python auf AWS Lambda süchtig macht
Python Ver. Einführung in WebPay mit ein wenig Code
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
Für mich als Django-Anfänger (2) - Was ist MTV?
Eine Szene, in der GPU für tiefes Lernen nützlich ist?