【问题标题】:how to random 10 numbers between 1 and 5 in list and the list must inculde all number如何在列表中随机 1 到 5 之间的 10 个数字,并且列表必须包含所有数字
【发布时间】:2022-01-05 15:37:13
【问题描述】:
from random import randint
k=[]
for i in range(10):
    k.append(randint(1,5))
    k.sort()
print(k)

输出是正确的,但有时它不包括从 1 到 5 的值。例如,可能 k=[2,3,3,3,3,4,4,5,5,5] 并且不包括 1 . 我需要包括所有数字

【问题讨论】:

  • 为什么要排序10次?
  • @PatrickArtner 我的错误,但如果列表中不包含 1、2、3、4、5,我需要重新排序。我必须使用 while 循环吗?或者什么
  • 取 range(1, 6) 从该范围添加随机数,然后创建结果的随机排列,以便初始常数位于随机位置,而不是全部位于开头。或者选择一个介于 1...n-4 之间的随机数并取那么多 1,然后选择一个介于 1...n-4-k 之间的随机数,其中 k 是到目前为止每个下一个数字所取的项目之和,然后随机化顺序(随机排列)。看看你能不能自己编码,如果不能告诉我。

标签: python python-3.x list function


【解决方案1】:

1 到 5 之间的 10 个随机数意味着 [1,1,1,1,1,1,1,1,1,1] 的列表是有效的结果 - 不太可能。

如果需要保证1到5在里面,以[1,2,3,4,5]开头,加上5个随机数:

from random import choices

k = [1,2,3,4,5]
k.extend( choices(range(1,6), k=5)) # add 5 more random numbers
k.sort()

print(k)

得到

[1,1,2,2,3,4,4,5,5,5]  # etc.

choices(range(1,6), k=5) 部分返回 1-5 范围内的 5 个数字的列表,无需循环。

【讨论】:

    【解决方案2】:

    使用NumPy library could have priority over pythonic random 来做这件事;可能是very faster in huge data volumes:

    import numpy as np
    
    nums = np.arange(1, 6)                        # create integer numbers from 1 to (6 - 1) to ensure 1 to 5 will be contained
    ran = np.random.random_integers(1, 6, 5)      # create 5 random integers from 1 to (6 - 1)
    combine = np.concatenate((nums, ran))         # combining aforementioned two arrays together
    np.random.shuffle(combine)                    # shuffling the created combined array
    

    这将得到像[4 5 4 2 5 1 3 4 2 1]这样的数组,其中将包含从1到5的所有整数。这个数组可以通过combine.tolist()转换为列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-17
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2020-02-13
      • 2019-12-01
      • 2021-09-15
      相关资源
      最近更新 更多