Les itertools de Python sont un peu utiles à connaître

Python a un module appelé itertools. Comme son nom l'indique, c'est un utilitaire d'itération, et parfois c'est un peu utile à savoir. Prenez donc note de ce que vous pensez pouvoir utiliser, avec un exemple de code personnel. Python est 2.7. Puisqu'il est possible d'écrire de manière équivalente dans la notation du package de corps, j'ai essayé de résumer uniquement ceux qui semblent rendre le code concis. (Il y a peut-être quelque chose qui peut être écrit de manière plus concise. Si tel est le cas, veuillez me le dire en secret.)

Combinez plusieurs itérateurs

(En fait, j'ai fait ce mémo car c'était un peu pratique d'utiliser la chaîne cette fois)

from itertools import chain

#Exemple: a,Je veux faire la somme des propriétés fuga de chaque élément de b

#aucun outil utilisé
hoge = sum(x.fuga for y in (a, b) for x in y)

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

Couvre les combinaisons possibles

from itertools import combinations

#Exemple:Je veux desserrer deux éléments différents dans le tableau a
#De même, il peut être utilisé lorsque vous souhaitez démêler différents n éléments.

#Non utilisé
for i in xrange(len(a)):
    for j in xrange(i + 1, len(a)):
        hoge(a[i], a[j])

#Utilisez (i<j est garanti)
for i, j in combinations(xrange(len(a)), 2):
    hoge(a[i], a[j])

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

Je me demande si itertools doit être utilisé ou imbriqué. Personnellement, j'utiliserais certainement itertools si la nidification est susceptible d'être triple ou plus.

Vous pouvez utiliser product si vous souhaitez combiner différents types d'indices. Par exemple, si vous voulez hoge (a [i], b [j])

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

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

ça ira. Utilisez «permutations» pour distinguer «hoge (i, j)» et «hoge (j, i)». Si vous voulez compter hoge (i, i), vous pouvez utiliser product (xrange (len (a)), repeat = 2) ou product (a, repeat = 2).

Cela semble utile car je dois souvent écrire du code pour lire personnellement plusieurs listes comme celle-ci.

Collectionnez la même classe

from itertools import groupby

#Exemple:Afficher les clés pour dict a avec la même valeur

#Non utilisé
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)

#utilisation
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)

Vous devez trier une fois. De plus, list (group by (hoge)) est impossible.

Autre

Répéter un itérateur indéfiniment

C'est "répéter". Cela pourrait être bien de le combiner avec zip.

Recommended Posts

Les itertools de Python sont un peu utiles à connaître
Une petite histoire à savoir comme un point addictif lors de l'écriture d'applications Twilio à l'aide de Python sur AWS Lambda
Python Ver. Présentation de WebPay avec un peu de code
Essayez de créer un Checkbutton dynamiquement avec Tkinter en Python
Pour moi en tant que débutant Django (2) - Qu'est-ce que MTV?
Une scène où le GPU est utile pour le deep learning?