Это ужасно уродливо:
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 = []
в котором все имена будут относиться к пустующему списку same!
psData,nsData,msData,ckData,mAData,RData,pData = [],[],[],[],[],[],[]
В зависимости от ваших потребностей вы можете рассмотреть использование defaultdict со списком factory. Что-то вроде:
my_lists = collections.defaultdict(list)
а затем вы можете напрямую добавить my_lists [ "psData" ] и так далее. Это соответствующая страница документа: http://docs.python.org/library/collections.html#collections.defaultdict
Немного более эффективный подход:
alist, blist, clist, dlist, elist = ([] for _ in xrange(5))
[ ПРИМЕЧАНИЕ ]:
Упомяните, что чистота может иметь последствия производительности. Вызов функции диапазона немного замедлит процесс инициализации. Остерегайтесь, если у вас есть какой-то процесс, который нужно повторно использовать переменную много раз.
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
было бы самым элегантным решением.