I want to use random.choice() to choose 5 value from first column in csv as bandwidth. After running the program, the result is 5 identical values. What's wrong with my program?

I have tried random.sample(), but it doesn't work with the Error ' in sample raise ValueError("Sample larger than population or is negative") '. So i just want to use random.choice(), it did not report an error, but extracted 5 duplicate values.

with open('/home/wifi.csv', 'r') as fp:
    reader = csv.reader(fp)
    data = [row for row in reader]

 #choose 5 value from first column as bandwidth
    bw = random.choice(data)[0]*5 

I expect the output is' 4.5 3.7 2.6 1.8 3.1 ' but the actual output is ' 4.5 4.5 4.5 4.5 4.5 '

2 Answers

Randy On Best Solutions

Multiplying a list by an integer N duplicates that list N times, which you saw:

In [4]: [1] * 5
Out[4]: [1, 1, 1, 1, 1]

What you want to do instead is do the random.choice multiple times. You can do that in a loop, or in something like a list comprehension as below:

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]
zach274 On

What you did was select one choice, and multiply it by 5.



['choice', 'choice', 'choice', 'choice', 'choice']

What you actually want to do is call random.choice() 5 separate times, and append the result to a list:

for _ in range(5): results.append(random.choice(dataset))

Which can be simplified with a list comprehension:

[random.choice(dataset) for _ in range(5)]