python生成不同随机数,关于python:如何生成不同的随机数?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

pick N items at random

我需要生成1到49之间的6个随机数,但是它们不能相同。 我知道如何使它们随机化,但我不确定如何确保它们不同。

该工作表建议显示每个数字并将其设置为零,但我看不出有什么帮助。

任何意见是极大的赞赏。

您应该发布您尝试过的内容。

您当然会意识到,如果它们不能相同,那么按照定义,它们不再是真正随机的。

是的,它们仍然是随机的,只是它们是从稍微小的列表中拉出来的。

@keirbtre:通过对随机数施加任何约束,可以使这些数字的随机性降低。

我知道它们的随机性较小,但是它们仍然是随机的。 您不知道会选择什么号码。

@finnw这确实不是重复的。 由于长度未知,"从未知长度的序列中随机抽取N个项目"是完全不同的问题。 对于已知长度的情况,存在一些可用的快捷方式,这些快捷方式在序列长度未知的情况下不可用。 所选数字的分布也将不同。 请删除具有误导性的重复标记。

您可以使用random.sample:

>>> random.sample(xrange(1,50), 6)

[26, 39, 36, 46, 37, 1]

"The worksheet recommends displaying each number and setting it to zero, but I don't see how that would help."

假设这是一项任务,并且您需要自己实施采样,则可以看看random.sample的实现方式。它确实可以提供信息,但是对于您的需求而言可能太复杂了,因为代码还确保了所有子切片也将是有效的随机样本。为了提高效率,它还根据人口规模使用了不同的方法。

至于工作表,我认为它假设您从1到49的数字列表开始,并建议您将选择的数字替换为0,因此如果重新选择,可以跳过。以下是一些伪代码,可以帮助您入门:

population = range(1, 50)  # list of numbers from 1 to 49

sample = []

until we get 6 samples:

index = a random number from 0 to 48  # look up random.randint()

if population[index] is not 0:  # if we found an unmarked value

append population[index] to sample

set population[index] = 0  # mark selected

如果您想尝试不同的方法,可以考虑多种其他方法,例如将列表随机化,然后截断,或某种形式的储层采样。

祝您工作顺利。

如果使用Python 3,请将xrange更改为range。

非常感谢! 这确实是任务的一部分。 您非常有帮助:)

别客气。

set不会保留任何重复项:

s = set()

while len(s) < 6:

s.add(get_my_new_random_number())

这是一个非常常见且愚蠢的采访问题,这是它的解决方案/算法:

import random

a = range(1,50)

for i in xrange(6):

b = a[random.randint(0,len(a)-i)]

a.remove(b)

print b

对于关心效率的人们来说,这里是我的解决方案和Chin的测试平台:

>>> random.sample(xrange(1,50), 6)

[26, 39, 36, 46, 37, 1]

结果:

>python -mtimeit -s'import try2'

[38, 7, 31, 24, 30, 32]

100000000 loops, best of 3: 0.0144 usec per loop

>python -mtimeit -s'import try1'

36

26

41

31

37

14

100000000 loops, best of 3: 0.0144 usec per loop

决心要同时!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用random模块和numpy模块来生成不同类型的随机数。在random模块中,常用的函数有: - random.random():生成一个0到1之间的随机浮点数。 - random.randint(n, m):生成一个n到m之间的随机整数。 - random.uniform(n, m):生成一个n到m之间的随机浮点数。 - random.choice([]):从列表中随机选取一个元素。 而在numpy模块中,常用的函数有: - np.random.rand():产生N维的均匀分布的随机数。 - np.random.randn():产生N维的正态分布的随机数。 - np.random.randint(n, m, k):产生n到m之间的k个随机整数。 - np.random.random():产生0到1之间的随机数。 通过使用这些函数,可以生成各种不同类型的随机数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python生成随机数的方法](https://download.csdn.net/download/weixin_38661800/13768034)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python生成随机数](https://blog.csdn.net/m0_53653974/article/details/125753330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python 生成随机数的三种方法](https://blog.csdn.net/robert_chen1988/article/details/82887820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值