Itération sur les noms de variables en python?
J'ai un groupe de variables nommées k1, k2, k3....k52. Ils les variables sont des listes/tableaux numpy, selon le scénario. Essentiellement, j'aimerais effectuer la même manipulation sur eux en masse à l'intérieur d'une boucle, mais j'ai du mal à ierating sur eux. En gros ce que j'aimerais c'est quelque chose comme ceci:
for i in arange(0,52):
'k'+ str(i) = log10(eval('k' + str(i)))
Évidemment, je sais que le ci-dessus ne fonctionnent pas, mais ça donne l'idée. Ma réelle tentative est ceci:
for i in arange(0,10):
rate = eval('k' + str(i))
rate = np.array(rate,dtype=float)
rate = log10(rate)
rate.tolist()
vars()[rate] = 'k' + str(i)
(Ses changé pour un tableau numpy donc je peux me connecter, et ensuite revenir à une liste, donc j'ai changer le nom de la variable de retour pour ce que c'était) Merci pour toute aide que vous pouvez fournir. J'ai le sentiment que c'est quelque chose de très simple, mais son échapper à moi en ce moment.
edit: merci beaucoup pour les réponses, je devrais avoir expliqué que je ne peux pas vraiment stocker un ensemble de tableau, ils ont besoin de rester en tant que variables indépendantes pour des raisons que je ne veux pas vraiment aller dans.
Je me demande combien de problèmes de programmation peut être résolu par l'ajout ou la suppression d'une couche d'indirection.
C'est une question de personnes qui apprennent à propos de Python structures de données. Cette approche est un peu comme l'écriture "de Nathan livre #1", "Nathan livre #2", etc. sur l'ensemble de vos livres, leur diffusion dans toute la maison, et puis essayer d'optimiser une façon de passer à travers eux. Si tout ce qui vous intéresse, c'est qu'ils sont tous dans un endroit, les mettre dans un sac (un
set
); si vous vous souciez de l'ordre, les mettre dans une pile (un list
), et de la sorte ou pas comme vous voulez; si vous vous souciez de pouvoir accéder à un niveau individuel, facilement à partir de son nom, de les mettre sur le plateau (un dict
). Pas d'étiquette décideurs nécessaire!
OriginalL'auteur Nathan Bush | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
La ligne:
doit être remplacé par:
Cela ne fonctionnera pas si c'est dans une fonction, et donc n'est pas une très bonne idée. La documentation dit explicitement de ne pas modifier le résultat de
vars
(qui est juste lalocals()
dict.)`OriginalL'auteur sissi_luaty
Si les éléments sont tous globals vous pouvez utiliser le
globals()
appeler pour obtenir un mappage, puis de les manipuler:mais vous vraiment veux juste stocker tous ces éléments dans une liste ou un dictionnaire au lieu.
dict
pour ces problèmes, mais depuis ils sont numérotés de façon séquentielle, j'irai peut-être avec une liste ici...k[1]
,k[2]
... plutôt que dek1
,k2
... bien sur, les listes de prendre encore plus de sens si vous index de 0 au lieu de 1. +1 pour la mention de liste ici, et de me faire vérifier ma réaction instinctive.OriginalL'auteur Martijn Pieters