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.)
(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))
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.
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.
Es ist "wiederholen". Es könnte schön sein, es mit "zip" zu kombinieren.
Recommended Posts