在i和j python之间生成n个随机数

时间:2018-02-07 16:36:43

标签: python r random

我想使用i和j之间的n个数字创建一个随机数。例如,对于n = 10且i = 1且j = 5,期望这样的输出:2414243211。我使用此代码在R中完成了它:

paste(floor(runif(10,1,5)),collapse="") #runif create 10 random number between 1 and 5 and floor make them as integer and finally paste makes them as a sequence of numbers instead of array. 

我想在Python中做同样的事情。我找到了random.uniform,但它生成了一个数字,我不想使用循环。

import random
import math
math.floor(random.uniform(1,5)) #just generate 1 number between 1 and 5

更新

  • i和j是0到9之间的整数,而n可以是任何整数。
  • i和j决定字符串中可以使用哪个数字,而n表示数字字符串的长度。

4 个答案:

答案 0 :(得分:4)

如果我理解你的问题(我不确定),并且你有Python 3.6,你可以使用random.choices

>>> from random import choices
>>> int(''.join(map(str, choices(range(1, 5), k=10))))
2121233233

答案 1 :(得分:3)

如果你认为列表推导是循环(它们实际上在很多方面),你会对此不满意但我会试试运气:

from random import randint

res = ''.join([str(randint(1, 5)) for _ in range(10)])
print(res)  #-> 4353344154

注意:

  1. 结果是一个字符串!如果您想要一个整数,请转换为int
  2. randint 包含;可能会生成并返回start1)和end5)。如果您不想这样做,请修改它们(start = 2end = 4
  3. 您是否有理由使用random.uniform(以及随后的math.floor()),而不仅仅是randint

答案 2 :(得分:3)

random.choices()功能可以满足您的需求:

>>> from random import choices
>>> n, i, j = 10, 1, 5
>>> population = list(map(str, range(i, j+1)))
>>> ''.join(choices(population, k=n))
'5143113531'

答案 3 :(得分:2)

x = ''.join([str(math.floor(random.uniform(1,5)))  for i in range(10)])