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.)
(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))
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.
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.
C'est "répéter". Cela pourrait être bien de le combiner avec zip
.
Recommended Posts