Utilisation de l'outil code> iTertools code>, j'ai toutes les permutations possibles d'une liste de numéros donnée, mais si la liste est la suivante: ils sont les mêmes mais < Code> itTools code> prend juste le premier zéro (par exemple) et le déplace à la quatrième place dans la liste et vice-versa. P> La question est la suivante: comment puis-je itération de certains numéros sélectionnés et laissé seul d'autres comme zéro? Il peut être avec ou sans iTerTools code> ne "sait pas" ne "sait pas" que itérant les zéros est gaspillé du travail, par exemple les itérations suivantes apparaîtront dans les résultats: p>
iTertools code>. p> p>
3 Réponses :
Ajoutez chaque résultat à une liste. Maintenant, vous aurez toutes les combinaisons possibles et ensuite procédez comme suit: définir affaimera la liste des permutations uniques uniquement.
Je ne suis pas totalement sûr que c'est le problème que vous essayez de résoudre ou que vous êtes inquiet de la performance.
Peu importe simplement faire un compte, je pensais que j'essaierais de contribuer quelque chose p> p>
Le seul problème que je vois avec votre approche est qu'il est inefficace de calcul. Il doit y avoir une meilleure façon.
Oui, le problème que j'essaie de résoudre concerne la performance et la vitesse. En utilisant de grandes listes de chiffres, par exemple de 30 ou plus, le programme fonctionne trop de temps et beaucoup de travail est gaspillé, ergo non efficace.
SET code> et
Liste code> ne sont même pas intégrés à Python. Peut-être que vous vouliez dire
list code> et
définir code>
Sans parler de cela, je jette non seulement tous les zéros (et leur position) longtemps avec toutes les autres répétitions
Ouais corrigé ces problèmes de capitalisation.
Vos questions ne sont pas claires, mais si vous essayez de répertorier les permutations sans avoir 0 code> dans votre sortie, vous pouvez le faire comme suit:
from itertools import permutations
def perms( listy ):
return permutations( [i for i in listy if i!=0])
Je ne pense pas que c'est ce qu'il veut, mais cela peut être la base de cela. Vous pouvez maintenant imprégner vos permutations avec 0S pour générer encore plus de combinaisons dont chacune a la longueur de la liste d'origine ☺
J'ai besoin de la 0 dans la sortie mais je n'ai pas besoin de cela pour faire partie de la permutation. Ceci pour éviter la sortie en double et la perte de travail de la CPU. Peut-être que je peux créer une liste de base de zéros, puis insérer les numéros permutés dedans?
Voilá - Cela fonctionne maintenant - après avoir obtenu les permutations sur la "viande", je reçois en outre toutes les combinaisons possibles pour les positions "0" et le rendement
une permutation pour chaque ensemble possible de "0 positions" pour chaque permutation
des non-0s: (J'ai utilisé le mot-clé 3 "non local" de Python - si vous êtes toujours sur Python 2.7,
Vous devrez adopter une autre approche, comme la fabrication Il s'agit d'une approche naïve qui permet de conserver une cache des permutations déjà «observées» - cela permet d'économiser sur le travail effectué à chaque permutation, mais NotonLe travail pour générer tout Permutations possibles: p> SEQ_LEN CODE> Be une liste avec un seul élément que vous pouvez ensuite repplacer sur la fonction interne) p>
Vous devez maintenant jeter un coup d'œil aux partitions de N où n est le nombre de zéros dans la liste d'origine. Le nombre d'éléments non nuls (k) est également important car ils définissent les types de partition admissibles. Par exemple, si k = 3 comme dans l'exemple ci-dessus, chaque partition peut être exprimée comme une somme de valeurs K + 1 mais pas plus.
@ V.Pétretto mais vous ne voulez pas qu'ils répètent, n'est-ce pas ??
Non, je ne veux pas qu'ils répètent, laissez-moi écrire un exemple de sortie: [0,1,1,0,8] [0,1,0,8,0] [1,0,8,0,0 ] [1,8,0,0,0,0] [8,0,1,0,0] et ainsi de suite
(laissant ceci juste pour remarquer que les commentaires ci-dessus concernaient une version antérieure de cette réponse. L'algorithme actuel permute les 0)
Merci beaucoup ! :)
Utilisez quelque chose comme
sortie2 = liste (SET (Sortie)) CODE>, où
Sortie code> est ce que vous avez obtenu de
itTools code>.
J'ai besoin d'itérer quelques chiffres dans toutes les positions dans la liste, laissant seul le zéro.
et là vous êtes. (ma nouvelle approche, la troisième approche, la réponse)