【问题标题】:Python: Doubles in a random generatorPython:随机生成器中的双打
【发布时间】:2015-10-29 20:11:09
【问题描述】:

我正在尝试创建一个生成器,它将在 1 到 m 的范围内查找 n 个随机整数。下面的代码正是这样做的,但是它有时会返回先前打印的数字的两倍。有谁知道我可以如何编辑它?另一件事,但更注重设计的是,我如何订购我的打印件以使数字按顺序排列?

import random

def hwset(m,n):
    i=0
    for i in range(0,n):
        print random.randrange(1,m+1,1)

【问题讨论】:

  • 你的意思是你的数字重复了?您是否尝试生成一个 sample 来代替?
  • 是的,这是一种更好的描述方式。什么是样本?
  • 样本是从总体中抽取的特定样本。 1 到 m 是人口,你从中取 n 幅图,没有替换。
  • @UsernameUnknown:它是从一个更大的集合中选择的,随机选取而不重复。
  • 请注意,您的函数不是生成器函数;相反,您有一个打印值的常规函数​​。你真的需要发电机吗?从更大的集合中挑选样本并不适合生成器方法。

标签: python random generator


【解决方案1】:

如果您想从 1 到 m 之间的所有整数中生成 n 数字的样本,请使用 random.sample() functionxrange() 对象(如果您使用的是 Python 3,请使用 range()):

def hwset(m, n):
    return random.sample(xrange(1, m + 1), n)

如果您希望对这些数字进行排序,只需对结果进行排序:

sorted_hwset = sorted(hwset(m, n))

演示:

>>> import random
>>> def hwset(m, n):
...     return random.sample(xrange(1, m + 1), n)
... 
>>> hwset(100, 5)
[25, 58, 2, 29, 57]
>>> hwset(100, 5)
[84, 55, 80, 65, 47]
>>> sorted(hwset(100, 5))
[1, 25, 77, 81, 92]
>>> sorted(hwset(100, 5))
[34, 46, 59, 66, 76]

【讨论】:

  • 完善我的功能现在可以工作,但我无法让排序工作
  • @UsernameUnknown:定义不起作用,在这里?你的意思是你有一个没有排序的序列?
  • 是的,我没有订购的序列
  • @UsernameUnknown:我加了一个小demo; sorted() 返回一个按排序顺序的新列表。您还可以使用result = hwset(m, n) 然后调用result.sort() 对结果列表进行就地排序。
猜你喜欢
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多