Це жахливо потворно:
psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []
Чи є спосіб оголосити ці змінні в одному рядку?
Це жахливо потворно:
psData = []
nsData = []
msData = []
ckData = []
mAData = []
RData = []
pData = []
Чи є спосіб оголосити ці змінні в одному рядку?
Відповіді:
alist, blist, clist, dlist, elist = ([] for i in range(5))
Недоліком вищевказаного підходу є те, що вам потрібно підрахувати кількість імен ліворуч =
і мати рівно стільки ж порожніх списків (наприклад, черезrange
дзвінка, або більш чітко) з правого боку.
Головне, не використовуйте щось подібне
alist, blist, clist, dlist, elist = [[]] * 5
ні
alist = blist = clist = dlist = elist = []
що змусило б усі імена посилатися на той самий порожній список!
alist, blist, clist = []
і, поки не знайшов цього
Залежно від ваших потреб, ви можете розглянути можливість використання дефолтного рішення з фабрикою списків. Щось на зразок:
my_lists = collections.defaultdict(list)
а потім ви можете безпосередньо додавати до my_lists ["psData"] тощо. Це відповідна сторінка документа: http://docs.python.org/library/collections.html#collections.defaultdict
Маючи на увазі, що охайність може мати наслідки роботи. Виклик функції діапазону трохи уповільнить процес ініціювання. Будьте обережні, якщо у вас є якийсь процес, який потрібно багато разів перевстановлювати змінну.
import time
def r_init():
st=time.time()
alist, blist, clist, dlist, elist = ([] for i in range(5))
et=time.time()
print("{:.15f}".format(et-st))
def p_init():
st=time.time()
alist=[];blist=[];clist=[];dlist=[];elist=[]
et=time.time()
print("{:.15f}".format(et-st))
for x in range(1,10):
r_init()
p_init()
print("\n")
Ви можете використовувати клас для ініціалізації / зберігання даних, це займе більше рядків, але може бути простішим для читання та більш об’єктно-орієнтованим.
Подібно до:
class Data:
def __init__(self):
self.var1=[]
<etc.>
def zeroize(self):
self.var1=[]
<etc.>
Тоді в основному біля початку:
data=Data()
Тоді у ваших циклах або в будь-якому місці декларації основного повідомлення ви можете використовувати клас.
data.var1.append(varN)
if(something):
data.zeroize()
Щось на зразок
alist, blist, clist, dlist, elist = ([],)*5
здається найелегантнішим рішенням.
alist.append("oops"); print(blist)
: ['oops']
.