0
votes

Comment créer une liste à l'intérieur de la boucle for?

Comment puis-je créer des listes en utilisant la boucle for pour obtenir list_1 , list_2 , list_3 , etc.? (Python)

J'ai essayé ceci:

  File test.py, line 3
runner_(i) = []
            ^

Mais ne fonctionne pas.

for i in range(5):
i += 1
list_(i) = []

SyntaxError: impossible d'affecter à l'appel de fonction


3 commentaires

Que se passe-t-il lorsque vous exécutez votre code? Qu'espérez-vous qu'il se passe? Comme c'est le cas dans la question, vous obtiendrez simplement une erreur d'indentation et cela s'arrêtera.


Est-ce que cela répond à votre question? Nom de variable dynamique en python


vouliez-vous créer un dictionnaire avec {'list_1': [], 'list_2' = []} ?


9 Réponses :


0
votes
dic={}
for i in range(5):
    dic[f"list{i}"]= []

print(dic)

5 commentaires

c'est un exemple


Cela donne li [1], li [2] ... pas list_1, list_2 ...


À mon avis, c'est la meilleure façon de faire ce que vous voulez vraiment faire


@JeffUK oh je viens de voir la question modifiée


il fait un dictionnaire avec 5 listes et vous pouvez accéder au dictionnaire comme accéder à une liste



1
votes

La création de plusieurs variables n'est pas considérée comme pythonique. Si vous souhaitez créer une série de variables, une bonne option est d'utiliser une liste, comme ceci:

dict_of_lists['list_1']
-> []

Lorsque vous souhaitez accéder à une liste spécifique:

dict_of_lists = {}
for i in range(5):
    dict_of_lists[f'list_{i}'] = []

Cependant, si vous souhaitez conserver les noms de variables, vous pouvez envisager d'utiliser un dictionnaire, peut-être comme ceci:

list_of_lists[3]
-> []

Accès:

list_of_lists = []
for i in range(5)
    list_of_lists.append([])


0 commentaires

0
votes

Essayez avec globals() :

list_dicts = {'list_'+str(i): [] for i in range(5)}

Le moyen le plus génial, cool et pythonique est d'utiliser un dictionnaire man ;-)

list_dicts['list_2']

Et retrivez / éditez comme:

list_dicts = {}
for i in range(5):
  i += 1
  list_dicts['list_'+str(i)] = []

Fatigué de la succion for boucle? Temps pour la compréhension du dict:

for i in range(5):
  i += 1
  globals()['list_'+str(i)] = []


1 commentaires

Il n'y a presque jamais de situation où les locals , les globals ou les exec sont la solution. Donc, bien que les globals fonctionnent dans ce cas, ce n'est certainement pas la bonne approche. C'est plus un hack qui mènera à la confusion et à de futurs problèmes. Vos autres suggestions sont bien meilleures.



1
votes

Vous pouvez créer une liste de listes:

main_list = []
for i in range(5):
    sub_list= []
    main_list.append(sub_list)
print(main_list)
print(main_list[0])


0 commentaires

1
votes

Je vous recommande fortement de ne pas faire cela du tout. La création de variables dynamiques est rarement une bonne idée et peut affecter les performances. Vous pouvez toujours utiliser un dictionnaire à la place, car ce serait plus approprié:

lists = {}
lists["list_" + str(i)] = []
lists["list_" + str(i)].append(somevalue)

Regardez ici pour plus d'explications: Création d'une liste basée sur la valeur stockée dans la variable en python


0 commentaires

0
votes

Pour cette tâche, je choisirais une structure de données différente dict()

Cela vous permettra de mapper les clés sur des listes respectives telles que:

{"list_0": [], "list_1": [], "list_2": [], "list_3":[], "list_4":[]}

Veuillez noter que j'ai utilisé une liste vide comme clé -> mappage de valeur.

Cela produira à son tour un dictionnaire suivant:

my_dictionary = {}
for i in range(5):
    my_dictionary[f"list_{i}"] = [] # This might be also my_dictionary["list_"+str(i)]


4 commentaires

ou en tant que dict-compréhension: {f"list_{i}": [] for i in range(5)} .


Exactement comme mentionné par @hiroprotagonist qui serait un peu moins lisible pour certains venant de langues différentes.


"list_"+i lancera une erreur. Vous devez d'abord convertir l'entier en chaîne.


Ah oui merci @TedKleinBergman c'est vrai, je suis beaucoup plus habitué aux f-strings.



0
votes

Je pense que vous recherchez la fonction locals() , cette fonction contient toutes les variables locales. vous pourriez alors écrire quelque chose comme ça.

for i in range(5):
   locals()["list_"+str(i)] = []


1 commentaires

Bien que cela fonctionne, ce n'est certainement pas la bonne approche. C'est plus un hack qui mènera à la confusion. L'OP a très probablement besoin d'utiliser une liste ou un dictionnaire. Il n'y a presque jamais de situation où les locals , les globals ou les exec sont la solution.



0
votes

Idéalement, vous devriez utiliser une liste ou un dictionnaire. Mais, utilisez le code ci-dessous pour l'exigence.

     for i in range(5):
         exec("list_%d = []" % (i+1))


1 commentaires

Vous avez raison de dire que l'OP a très probablement besoin d'utiliser une liste ou un dictionnaire. Il n'y a presque jamais de situation où les locals , les globals ou les exec sont la solution. Utiliser exec comme celui-ci est plus un hack qui mènera à la confusion et potentiellement à de nombreux problèmes futurs.



0
votes

J'espère que c'est ta réponse

Printing list_1 =  []
Printing list_2 =  []
Printing list_3 =  []
Printing list_4 =  []
Printing list_5 =  []

Voici la sortie:

for x in range(5):
    x += 1
    list_name = "list_" + str(x)
    list_item = []
    print("Printing {0} = ".format(list_name), list_item)



0 commentaires