9
votes

Itération de trois listes à la fois à Python?

Ceci pourrait être une question plutôt complexe car il est possible que beaucoup d'entre vous ne connaissent pas le logiciel que je l'écris pour: Autodesk maya 2011. J'essaie d'accélérer un processus lent fastidieux (gréement: donnant 3D caractères la possibilité de bouger) en écrivant un script qui le fait automatiquement.

Je vais faire de mon mieux pour expliquer la situation.

J'ai un script qui prend un objet qui prend un objet qui prend un objet de Cet objet, les stocke dans une liste, met ensuite l'objet initial à la fin de la liste, inverse la liste car c'est le mauvais moyen, puis met l'objet initial à l'avant.

problème: là-bas Trois énumérations différentes sont toutes les mêmes types d'objets, mais avec des noms différents et ils sont en réalité des objets différents. Mon objectif est de les connecter ensemble en générant des nœuds appelés «blendcolors». Mais si j'ai une boucle pour les générer pour chaque objet de la liste A, j'ai besoin de boucles qui les connectent également aux objets d'autres listes et je ne peux pas comprendre cela.

Voici mon code, Il a été joué avec donc est plus incomplète qu'auparavant, aussi loin que la boucle réelle va. xxx


3 commentaires

Les index dans les trois listes sont-ils identiques? c'est à dire. 0 est la même chose pour les trois listes?


Il serait beaucoup plus facile de suivre ce que votre code tente de faire si les noms de variable n'étaient pas un bruit de ligne.


@Daenyth: Ils ne sont pas un bruit de ligne si vous comprenez l'espace problématique.


4 Réponses :


1
votes

Pourquoi existe-t-il "il existe trois listes différentes tous les mêmes types d'objets"? Pourquoi cela ne peut-il pas être réparé pour créer une liste, où les trois objets sont correctement assortis?

Les chances sont bonnes qu'une simple cartographie serait meilleure que trois listes parallèles.

Plus précisément, vous devez corriger chipik = cmds.listrèle (ikjoint, ad = true, type = ' ') fonctionner comme celui-ci. xxx

de sorte que chipik est une liste de mappages contenant toutes les trois informations. < / p>


2 commentaires

Bonjour, peut-être que je le fais mal, mais cela ne fonctionne pas pour moi, il pourrait y avoir un nombre quelconque de joints dans la chaîne jointe, donc je ne peux donc pas spécifier lesquels pour cela pour se connecter si j'ai une liste. J'ai essayé d'ajouter à une liste principale et de simplement utiliser la liste [1], etc. mais même problème. Je suis vraiment nouveau à Python, seulement une semaine. Juste pour le compte rendu, aucune commande de ce type en tant que de la mise à jour des parents à Maya, d'où ma méthode Hapdash consistant à ajouter à une liste principale, j'espère que vous pouvez penser à une autre manière parce que je suis totalement perdu ... :)


@Jared: une liste de mappages n'est pas ajoutée à une liste principale. Dans ce cas, vous devrez écrire votre propre boucle de mise à jour.



31
votes

Je ne comprends pas tout à fait la question, recherchez-vous xxx

?

Que izip est-ce qu'il faut un numéro de variable des arguments et renvoie un itérateur qui donne toujours des éléments respectifs des arguments (un tuple des premiers arguments à la première exécution, un tuple des seconds arguments à la deuxième course, et ainsi de suite).


1 commentaires

Zip () Dans Python3 fait également la même chose maintenant et izip n'existe plus.



1
votes

@florian Way way avec zip ou izip fonctionne vraiment bien, mais vous pouvez également utiliser l'énumérable pour obtenir le nombre de liste,

list_a  = ["x", "y"]
list_b  = ["k", "j"]
list_c  = ["m", "n"]

for count, item in enumerate(list_a):
    print item, list_b[count], list_c[count]


1 commentaires

Je suis d'accord avec vous, même si je nommerais la première variable d'indexation "IDX" ou quelque chose de similaire au lieu de "compter". Compter semble plutôt comme une variable agrégée pour moi



0
votes

Python3 Réponse:

for a, b, c in zip(lst1, lst2, lst3):
    ...


0 commentaires