Le code ci-dessus fournit la liste des entiers dont les chiffres sont en ordre croissant. Mais avec un nombre croissant de chiffres, cela devient moins efficace. Y a-t-il une façon de rendre le code plus efficace? Pouvons-nous le faire fonctionner pour des chiffres plus de 30?
3 Réponses :
suggestion d'un algorithme: p>
De cette façon, vous obtenez le prochain numéro croissant. Faites-en une méthode. Vous remarquerez que vous pouvez même modifier cela un peu. P>
Après cela, ajoutez 1 au nombre et répétez le processus sur chacun. Vous obtiendrez le 2224456, 2224457, 2224458, 2224459. P>
Lorsque vous atteignez 2224460, il sera transformé en nombre croissant 222446 Je ne suis pas sûr que cela fonctionnera pour des chiffres dans la gamme 10 ^ 30, mais cela ignorera au moins 11% des chiffres au début (1000 ... à 1111 ...). Cela devrait se reproduire à nouveau à 1200 ... à 1222 ... et ainsi de suite, alors il pourrait em> être assez rapide. P>
Procédé avec récursion: impression: p> référence rapide à l'aide impression sur ma machine: p>
TIMIIT CODE> : p>
IMHO, OP aurait pu mettre en œuvre cela lui-même. Mais il est également bon de savoir que vous fournissez des services de codage gratuits.
@Thomasweller J'ai essayé de le rendre plus efficace, mais il faut environ 19 secondes pour générer (20) code>. Pour
30 code> je ne l'ai pas essayé.
J'écrirais cette première ligne comme str_numbers = '0123456789' code>. Beaucoup plus simple.
@Andrejkesely, le code fonctionne correctement. J'ai appris quelque chose de nouveau aujourd'hui. :)
Une solution consiste à utiliser Notez que selon le DOC , P> Si l'entrée iTable est triée, les tuples combinés seront
produit dans l'ordre trié p>
BlockQuote> L'ordre des sorties est donc garanti. p> Entre-temps, l'implémentation équivalente dans le document suggère que dans chaque combinaison de sortie tuple, les éléments suivent le même ordre que l'entrée introductive. Par conséquent, l'ordre des chiffres dans chaque combinaison de sortie est également garanti. P> p> itTools.combinations_with_replacement code>:
Pourriez-vous ajouter un exemple d'entrée et de sortie souhaité?
Vous devez choisir un meilleur algorithme. Cette méthode de la force brute sera lente, peu importe la manière dont vous accélérez la pièce.
@MarkRansom, je sais que c'est inefficace. Mais je ne pouvais penser à aucun autre algorithme mieux que cela.
Ne traversez pas tous les chiffres et vérifiez s'ils répondent à l'exigence. Générer uniquement des nombres répondant à l'exigence en premier lieu.
Voulez-vous vraiment tous ces chiffres? Ou voulez-vous juste savoir combien il y a?