web-dev-qa-db-fra.com

Python: Assigne chaque élément d'une liste à une variable séparée

si j'ai une liste, dites:

ll = ['xx','yy','zz']

et je veux assigner chaque élément de cette liste à une variable séparée:

var1 = xx
var2 = yy
var3 = zz

sans savoir combien de temps la liste est longue, comment pourrais-je le faire? J'ai essayé:

max = len(ll)
count = 0
for ii in ll:
    varcount = ii
    count += 1
    if count == max:
        break

Je sais que varcount n'est pas un moyen valide de créer une variable dynamique, mais ce que j'essaie de faire, c'est de créer var0, var1, var2, var3, etc., en fonction du nombre.

Merci!

MODIFIER:

nVM je devrais commencer une nouvelle question. Merci pour l'aide en tout cas!

14
David Yang

en règle générale, il est suggéré not d'utiliser ce type de programmation pour un grand nombre d'éléments/variables de liste.

Cependant, la déclaration suivante fonctionne bien et comme prévu

a,b,c = [1,2,3]

Ceci s'appelle la "déstructuration".

cela pourrait vous faire économiser des lignes de code dans certains cas, par exemple. J'ai un, b, c comme nombres entiers et veux leurs valeurs de chaîne comme sa, sb, sc:

sa, sb,sc = [str(e) for e in [a,b,c]]

ou encore mieux

sa, sb,sc = map(str, (a,b,c) )
18
cmantas

Ce n'est pas une bonne idée de le faire; Que ferez-vous avec les variables après les avoir définies?

Mais si vous avez une bonne raison, voici comment le faire en python:

for n, val in enumerate(ll):
    globals()["var%d"%n] = val

print var2  # etc.

Ici, globals() est l’espace de noms local présenté sous forme de dictionnaire. La numérotation commence à zéro, comme les index de tableau, mais vous pouvez indiquer à enumerate() de commencer à 1.

Mais encore une fois: il est peu probable que cela vous soit réellement utile.

14
alexis

Vous devriez revenir en arrière et repenser pourquoi vous "avez besoin" de variables dynamiques. Il est fort probable que vous puissiez créer la même fonctionnalité en parcourant la liste en boucle ou en la découpant en morceaux.

9
Darrick Herwehe

Si le nombre d'éléments ne change pas, vous pouvez convertir la liste en chaîne et la scinder en variables. 

wedges = ["Panther", "ALi", 0, 360]
a,b,c,d = str(wedges).split()
print a,b,c,d
2
user1767754

Je suppose que vous obtenez la liste au moyen d'une requête SQL - pourquoi vous ne pouvez pas vous engager sur une longueur. Avec cela, il me semble évident que vous souhaitez utiliser ces valeurs et exécuter des commandes SQL supplémentaires en utilisant chaque valeur séparément de la liste nouvellement acquise. Ce n'est pas un moyen de sortir du concept si vous le prenez d'un point de vue SQL, et si je suis correct, je fournirai la syntaxe. Cependant, vous n'aurez pas besoin de créer des noms de variable séparés avec cette solution et de ne pas perdre la polyvalence que vous recherchez. SI JE SUIS MAUVAIS DÉSOLÉ DE perdre votre temps

0
BrianB

Au lieu de cela, faites ceci:

>>> var = ['xx','yy','zz']
>>> var[0]
'xx'
>>> var[1]
'yy'
>>> var[2]
'zz'
0
dansalmo