Python: imbriqué pour des boucles
Je voudrais aller à travers tous les n chiffres, par exemple que le deuxième chiffre du nombre est toujours inférieur ou égal au premier, le troisième est inférieure ou égale à la deuxième, etc. Je peux obtenir ce par la rédaction d'un horrible le code tel que:
for i in range(10):
for j in range(i+1):
for k in range(j+1):
etc., mais avec 10 chiffres de mon code commence à regarder horrible, et aussi que beaucoup de l'écriture, et l'indentation obtenir horrible si je veux saluer quelques-uns de ceux-ci. Est-il un bien, concise façon d'obtenir ce?
Edit: juste pour que les gens savent pourquoi je suis embêter avec cela, https://projecteuler.net/problem=74 m'a permis de vérifier les numéros de 1 à un million. Malheureusement, Il n'est pas aussi simple que je le pensais -- chiffres avec des zéros non significatifs sont traités différemment de ceux avec des zéros à l'intérieur, de sorte que certains magiques supplémentaires ont dû être effectuées. De toute façon, merci à tous pour des suggestions judicieuses.
source d'informationauteur 098799
Vous devez vous connecter pour publier un commentaire.
Pourrait utiliser
itertools
:Ou de manière récursive, en ajoutant plus et plus de chiffres jusqu'à ce que suffisamment, qui peuvent plus produire directement de l'
int
objets au lieu de chiffres de n-uplets (pas sûr si c'est ce que vous avez réellement besoin):Démo (note elle laisse "
000
", vous ne savez pas si vous voulez que, de toute façon):cette approche à l'aide de
itertools
:notez que l'ordre n'est pas le même que dans votre approche originale.
j'ai récemment eu un ) des nouvelles question...
Une simple approche récursive:
Alors appelé via:
fonctionne comme prévu.
Le mathématicien de l'approche
La itertools package dispose déjà d'une logique qui, pour l'essentiel déjà implémente cette récursivité. Sans doute mieux que nous pouvons, avec beaucoup d'essais. On peut donc l'utiliser comme suit:
Donné un sous-ensemble ordonné
a[0]<a[1]<...<a[n-1]
de{0,1,...,n+8}
nous choisissons le nombre avec le ième chiffre égal àa[i]-i
. Nous avons d'exclure le casa[n-1]==n-1
parce qu'il se compose de nombre avec tous les zéros.J'ai mis en place @iFlo de la suggestion, comme a commenté à l'origine. Ce n'est pas hyper efficace mais il n'est certainement pas à prendre âges.
Je serais probablement mettre en œuvre ce de manière récursive:
La sortie: