Python – cum se generează o listă de variabile cu un nou număr la sfârșit (Programare, Python, Variabile, Generare Automată)

SchoonSauce a intrebat.

Ceea ce aș dori să fac este să găsesc o modalitate mai concisă de a crea variabile de liste goale care vor fi similare una cu cealaltă, cu excepția numerelor diferite la sfârșit.

#For example:
var1 = []
var2 = []
var3 = []
var4 = []
#...
varN = []

#with the end goal of:
var_list = [var1,var2,var3,var4, ... varN]

Comentarii

  • Ar trebui să explicați adevărata problemă. Crearea dinamică a variabilelor nu este o idee bună. –  > Por Matthias.
5 răspunsuri
vitiral

Utilizați o înțelegere a listei:

[[] for n in range(N)]

sau o simplă buclă for

empt_lists = []
for n in range(N):
    empt_lists.append([])

Rețineți că [[]]*N NU funcționează, va folosi același pointer pentru toate elementele!!!

utilizator3540225

Ok…o posibilă soluție este să generezi atribute de clasă, pe care le poți folosi după:

class MyClass:
    pass
myinstance = MyClass()  # if you want instance for example
setattr(myinstance, "randomname", "desiredvalue")
print myinstance.randomname  # wonderfull!

puneți-l în listă dacă este posibil în cazul dvs.

nbpeth

poți concatena atribuțiile variabilelor, dacă la asta te referi, poți să le setezi pe toate la [] var1, var2, var3 = [] ai vrut ca toate variabilele să fie setate la un array gol sau la numere reale

user255555451

Variabilele dinamice sunt considerate o practică foarte proastă. Prin urmare, nu voi da o soluție care să le folosească. 🙂

După cum a subliniat @GarrettLinux, puteți face cu ușurință o înțelegere a listei care va crea o listă de liste. Puteți apoi să accesați aceste liste prin indexare (de ex. lst[0], , lst[1], , etc.)

Cu toate acestea, dacă doriți ca aceste liste să fie denumite (de ex. var1, , var2, etc.), ceea ce cred că ați dorit, atunci puteți utiliza undict implicit de la collections.defaultdict:

from collections import defaultdict
dct = defaultdict(list)
for i in xrange(5):
    dct["var{}".format(i+1)]

Demo:

>>> dct
defaultdict(<type 'list'>, {'var5': [], 'var4': [], 'var1': [], 'var3': [], 'var2': []})
>>> dct["var1"]
[]
>>> dct["var1"].append('value')
>>> dct["var1"]
['value']
>>> dct
defaultdict(<type 'list'>, {'var5': [], 'var4': [], 'var1': ['value'], 'var3': [], 'var2': []})
>>>

După cum puteți vedea, această soluție imită îndeaproape efectul variabilelor dinamice.

Matthew Chachkin

Am avut și eu această întrebare. Am ajuns să fac o listă cu toate variabilele mele și apoi o listă cu numele variabilelor

var1 = 123456 
var2 = 123457 
list1 = [var1, var2] 
raninput = input("Words") 
if raninput not in list1: 
  print("Hi")