Est-il un Python équivalent de la gamme(n) pour multidimensionnelle des plages?
Sur Python, range(3) sera de retour [0,1,2]. Est-il un équivalent pour multidimensionnelle des plages?
range((3,2)) # [(0,0),(0,1),(1,0),(1,1),(2,0),(2,1)]
Ainsi, par exemple, le bouclage bien que les carreaux d'une zone rectangulaire sur une mosaïque de jeu peut être écrite comme:
for x,y in range((3,2)):
Remarque je ne suis pas à demander une mise en œuvre. Je voudrais savoir si c'est un motif reconnu et si il y a une fonction intégrée de sur Python ou c'est la norme/commune de bibliothèques.
Vous devez vous connecter pour publier un commentaire.
Dans numpy, c'est
numpy.ndindex
. Aussi jeter un oeil ànumpy.ndenumerate
.E. g.
Cela donne:
Vous pouvez utiliser
itertools.product()
:Les multiples répétées
xrange()
états pourrait être exprimée comme ça, si vous voulez l'appliquer à grande échelle de un à dix dimensions de la boucle ou quelque chose de même ridicule:Qui passe en boucle sur dix variables, variant de
(0,0,0,0,0,0,0,0,0,0)
à(2,2,2,2,2,2,2,2,2,2)
.En général
itertools
est un incroyablement génial module. De la même manière les expressions régulières sont beaucoup plus expressifs que "la plaine" de la chaîne de méthodes,itertools
est très élégante, une façon de s'exprimer de boucles complexes. Vous vous devez de lire leitertools
documentation du module. Il rendra votre vie plus amusante.for c in product(*([xrange(5)]*3)): print c
: à partir de (0,0,0) à (4,4,4)itertools.tee()
si vous voulez des répliques exactes - je crois que l'implémentation sous-jacente est plus efficace en raison de la mise en cache.itertools
docs avant de proposer des solutions extrêmement complexes. C'estitertools.product(xrange(3), repeat = 3)
.En fait il y a une syntaxe simple pour cela. Vous avez juste besoin d'avoir deux
for
s:Qui est le produit cartésien de deux listes donc:
donne ce résultat:
Vous pouvez utiliser
product
deitertools
module.Je voudrais prendre un coup d'oeil à
numpy.meshgrid
:http://docs.scipy.org/doc/numpy-1.6.0/reference/generated/numpy.meshgrid.html
qui vous donnera les coordonnées X et Y de la grille de valeurs pour chaque position dans un filet/grille. Ensuite, vous pourriez faire quelque chose comme:
ou
numpy.mgrid
etnumpy.ogrid
ici.Numpy est
ndindex()
travaille pour l'exemple que vous avez donné, mais il ne sert pas tous les cas d'utilisation. Contrairement à Python intégré dansrange()
, qui permet à la fois arbitrairestart
,stop
, etstep
, numpy estnp.ndindex()
accepte uniquement unstop
. (Lestart
est présumé être(0,0,...)
, et lastep
est(1,1,...)
.)Voici une application qui agit plus comme le haut-
range()
fonction. C'est, il permet arbitrairestart
/stop
/step
arguments, mais il fonctionne sur tuples au lieu de simples entiers.Exemple: