J'ai un grand iérêteur, en fait, un grand appareil donné par: Je voudrais accéder au millionième élément. J'ai déjà un problème résolu de différentes manières. P> Casting iTABLE à lister et à obtenir 1000000ème élément: p>
Passer manuellement des éléments jusqu'à 999999: P>
Passer manuellement Éléments V2: P>
Utilisation d'Islice de Itertools: P>
return islice(permutations(range(10)), 999999, 1000000).next()
p = permutations(range(10))
for i, element in enumerate(p):
if i == 999999:
return element
p = permutations(range(10))
for i in xrange(999999): p.next()
return p.next()
return list(permutations(range(10)))[999999]
3 Réponses :
Utilisez le notez le Simplified à votre exemple, où vous souhaitez sauter 999999 éléments, puis renvoyer l'élément 1000000: p> Pour illustrer, voici les horaires de seulement 10 répétitions de chaque méthode: p> iTertools code> recette
à ignorer consommer code >
n code> éléments:
islice () code> appelez-les; Il utilise
n, n code>, effectivement ne pas renvoyer rien em> et la
suivant () code> La fonction tombe à la valeur par défaut. p>
islice () code> traite l'itérateur en C, quelque chose que les boucles python ne peuvent pas battre. p>
islice ( ) code> La méthode est presque 7 fois plus rapide que la prochaine méthode la plus rapide. P> P>
C'était rapide et vraiment détaillé une bonne réponse. À propos, vous m'avez également appris un moyen d'appeler des fonctions en utilisant le temps imparti. Merci = d
Trouver la nième permutation peut simplement être un exemple, mais si c'est en fait le problème que vous essayez de résoudre puis il y a un meilleur moyen de le faire. Au lieu de sauter les éléments du démonteur, vous pouvez calculer directement la nième permutation. Emprunter le code de une autre réponse ici : exemple et comparaison de chronométrage: p> même réponse, plus de 3000 fois plus rapidement. Notez que j'ai fait une légère modification au code d'origine afin qu'elle ne détruisait plus la liste d'origine. P> p>
Ce n'était pas la casquette de la question, je n'étais que curieux à la manière plus rapide de sauter des éléments d'une irable. Cependant, votre réponse est un intérêt d'intérêt de résoudre le Nth factorial encore plus rapidement. Je vous ai donné +1. THX!
Il est effectivement gaspillé de progresser avec un million d'articles pour arriver à la suivante. Malheureusement, s'il peut être évité dépend de votre itérateur: si l'itérateur a un moyen de passer directement à un décalage particulier, il peut implémenter la méthode Si votre source de données doit générer toutes les valeurs antérieures afin d'y arriver, comment vous les jeter est le moindre de vos problèmes. Vous pouvez choisir une belle façon, mais c'est juste glaçage sur le gâteau. P>
ps. Compte tenu du contexte de votre question, j'allais définir un algorithme pour générer directement la nième permutation, mais je vois @ f.j. me battre à ça. Belle solution! : -) p> __ getItem __ code> et vous pouvez l'utiliser pour demander
itérateur [1000000] code> directement. (Comment cela s'y rend compte jusqu'à l'algorithme de génération). P>
De nombreux processus ne peuvent pas vous donner cette option; prises de réseau par exemple. Ou un fichier avec des lignes de longueur variable, il faut passer les lignes x code>. Mais oui, si vous pouvez «rechercher» directement à l'article dont vous avez besoin, utilisez-le.
Exactement, c'est ce que j'essayais d'en avoir. Ce qui est "inélégant" (lu: inefficace) est qu'il n'ya souvent aucun moyen de sortir de générer les objets sautés.