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
9 Réponses :
dic={} for i in range(5): dic[f"list{i}"]= [] print(dic)
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
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([])
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)] = []
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.
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])
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
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)]
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.
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)] = []
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.
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))
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.
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)
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' = []}
?