Я использую имена динамических списков в своем скрипте.
раньше я использовал val = random.choice(MA['MA{0}'.format(m)]
Это возвращает мне значение списка MA['MA{0}'.format(m)] в соответствии с циклом m. Нет проблем.
Теперь я хочу использовать val = random.choices (MA['MA{0}'.format(m)], Weights= MA['MA{0}weights'.format(m)], k=1) для взвешенного выбора.
Проблема в том, что я получаю значение первого списка MA['MA{0}'.format(m)], а затем прекращаю цикл через am и r. Итак, в конце я получаю первый список MA1rot с одним элементом и другие списки m пусты.
мои веса выглядят, например, как MA5weights = [8,8,8,8,8,7,7,8] или MA1weights = [33,5,8,8,7] индивидуально для каждого списка.
MA = globals()
for r in range(1, 5):
try:
Stations_temp = Stations.copy()
for m in range(1, len(names)+1):
while True:
loops +=1
if r == 1: # first station to list
MA['MA{0}rot'.format(m)] = []
if len(MA['MA{0}'.format(m)]) == 0:
MA['MA{0}rot'.format(m)].append(MA['MA{0}rot'.format(m)][r-3])
Stations_temp.remove(MA['MA{0}rot'.format(m)][r-3])
break
if m == length:
MA['MA{0}rot'.format(m)].append(Stations_temp[0])
break
else:
#val = random.choice(MA['MA{0}'.format(m)])
val = random.choices(MA['MA{0}'.format(m)], weights= MA['MA{0}weights'.format(m)], k=1)
if (r >= 2) == True:
temp = MA['MA{0}rot'.format(m)][-1]
#print(val, temp)
temp = temp[:-2]
val_temp = val[:-2]
if (val_temp == temp) == True:
continue
#check random value
if (val in Stations_temp) == True:
MA['MA{0}rot'.format(m)].append(val)
Stations_temp.remove(val)
MA['MA{0}'.format(m)].remove(val) station
break
if loops >= 5000:
loop_list.append(loops)
break
except:
continue
Подробнее здесь: https://stackoverflow.com/questions/781 ... om-choices