Я хочу использовать random.choice(), чтобы выбрать 5 значений из первого столбца в csv в качестве пропускной способности. После запуска программы получается 5 одинаковых значений. Что не так с моей программой?
Я пробовал random.sample(), но он не работает с ошибкой 'в образце поднять ValueError("Выборка больше, чем совокупность или отрицательна") '. Поэтому я просто хочу использовать random.choice(), он не сообщил об ошибке, но извлек 5 повторяющихся значений.
with open('/home/wifi.csv', 'r') as fp:
reader = csv.reader(fp)
data = [row for row in reader]
random.choice(data)
#choose 5 value from first column as bandwidth
bw = random.choice(data)[0]*5
print(bw)
Я ожидаю, что результат будет «4,5 3,7 2,6 1,8 3,1». но фактический результат «4,5 4,5 4,5 4,5 4,5»






Умножение списка на целое число N дублирует этот список N раз, что вы видели:
In [4]: [1] * 5
Out[4]: [1, 1, 1, 1, 1]
Вместо этого вы хотите сделать random.choice несколько раз. Вы можете сделать это в цикле или в чем-то вроде понимания списка, как показано ниже:
In [5]: x = list(range(10))
In [6]: [random.choice(x) for _ in range(10)]
Out[6]: [2, 1, 5, 7, 5, 5, 7, 3, 2, 5]
Что вы сделали, так это выбрали один вариант и умножили его на 5.
['choice']*5
обозначает
['choice', 'choice', 'choice', 'choice', 'choice']
То, что вы на самом деле хотите сделать, это вызвать random.choice() 5 раз и добавить результат в список:
for _ in range(5): results.append(random.choice(dataset))
Что можно упростить с помощью понимания списка:
[random.choice(dataset) for _ in range(5)]
Связано: stackoverflow.com/questions/240178/…