【问题标题】:How to use random.choice() to perform multiple random choice?如何使用 random.choice() 执行多项随机选择?
【发布时间】:2019-05-16 15:14:35
【问题描述】:

我想使用 random.choice() 从 csv 的第一列中选​​择 5 个值作为带宽。运行程序后,结果是 5 个相同的值。我的程序有什么问题?

我尝试了 random.sample(),但它不适用于示例中的 Error ' raise 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'

【问题讨论】:

标签: python random


【解决方案1】:

将一个列表乘以一个整数 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]

【讨论】:

    【解决方案2】:

    你所做的是选择一个选项,然后乘以 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)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      相关资源
      最近更新 更多