Évitez les boucles multiples en Python

introduction

J'ai déjà publié un article sur Ruby intitulé Évitez les boucles multiples avec le produit Array #. Cet article utilise Array # product pour transformer plusieurs boucles en boucles uniques [^ 1 ] Présentation de la méthode. Je suis personnellement dans Python ces jours-ci, alors j'ai essayé de savoir comment écrire dans ce langage.

Exemple de code avant modification

python


for year in range(2010, 2013):
  for i in range(1, 3):
    for char in ('a', 'b', 'c'):
      print(year, i, char)

stdout


2010 1 a
2010 1 b
2010 1 c
2010 2 a
2010 2 b
2010 2 c
2011 1 a
2011 1 b
2011 1 c
2011 2 a
2011 2 b
2011 2 c
2012 1 a
2012 1 b
2012 1 c
2012 2 a
2012 2 b
2012 2 c

Méthode 1: utilisez itertools.product ()

Pour trouver le produit cartésien (produit direct) de itertools.product () en Python ainsi que le produit Array # en Ruby. Il y a une fonction de.

python


from itertools import product

years = range(2010, 2013)
integers = range(1, 3)
chars = ('a', 'b', 'c')

for year, i, char in product(years, integers, chars):
  print(year, i, char)

Méthode 2: utiliser la notation d'inclusion

La notation d'inclusion imbriquée est également disponible.

python


years = range(2010, 2013)
integers = range(1, 3)
chars = ('a', 'b', 'c')

combinations = [(year, i, char)
                for year in years
                for i in integers
                for char in chars]

for year, i, char in combinations:
  print(year, i, char)

Bonus: pour Ruby

ruby


years = Array(2010..2012)
integers = Array(1..2)
chars = Array('a'..'c')

years.product(integers, chars) { |year, i, char| puts("#{year} #{i} #{char}") }

référence

[^ 1]: C'est juste une apparence, et il s'agit de changer le nombre de retraits de syntaxe de boucle de multiple à un. Il ne réduit pas le nombre de boucles internes ou la quantité de calcul.

Recommended Posts

Évitez les boucles multiples en Python
Évitez les boucles imbriquées en PHP et Python
Expression de régression multiple en Python
Évitez KeyError dans le dictionnaire python
[Python] Afficher plusieurs fenêtres avec Tkinter
Test statistique (test multiple) en Python: scikit_posthocs
Supprimer plusieurs éléments dans la liste python
Gérez plusieurs versions de python en un seul jupyter
Lors de la spécification de plusieurs clés dans le tri python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Envoyer des e-mails à plusieurs destinataires avec Python (Python3)
Époque en Python
Discord en Python
Decorator pour éviter UnicodeEncodeError dans Python 3 print ()
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
Traiter plusieurs listes avec for en Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Obtenez plusieurs clés maximales dans le type de dictionnaire Python
[Python] Traitement de plusieurs erreurs d'appel dans ray.init
Liste triée en Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
À propos de Python for loop