【问题标题】:How to have a list of random numbers by ensuring all of them at least once used?如何通过确保所有随机数至少使用一次来获得随机数列表?
【发布时间】:2017-06-07 20:41:47
【问题描述】:

我想要一个从 1 到 10 的数字列表,出现次数很多,因此我开始使用以下代码:

list(range(1,11))

但是,它只给出每个数字一次。我需要有一个双倍大小的输出,其中一半具有任意排序的数字,一半应具有给定范围内的随机数,如下所示:

[1,2,3,4,5,6,7,8,9,10,3,4,2,7,5,7,5,2,8,9]

我的做法是:

1) 制作随机列表

a = random.randint(0,9)

2) 结合范围的输出

b = list(range(1,11))
result = a+b

是否可以通过其他方式获得?

【问题讨论】:

  • 如果您希望后半部分的元素仅是前半部分但被打乱,请检查我的编辑。

标签: python arrays list numpy range


【解决方案1】:
import random

l = [x for x in range(11)] + [random.randint(0, 10) for x in range(11)]

编辑 如果您希望列表的后半部分仅包含前半部分的元素,但顺序随机

a = [x for x in range(11)]
b = a[:]
random.shuffle(b)
a.extend(b)

>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 7, 4, 10, 1, 5, 9, 3, 0, 6, 2, 8]

【讨论】:

    【解决方案2】:

    使用内置的random

    import random
    
    my_list = list(range(1,11))
    for i in range(10):
        my_list.append(random.randint(0, 10))
    
    print(my_list)
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 6, 5, 10, 8, 6, 10, 6, 5, 6, 6]
    

    【讨论】:

    • @Shiva 你可以做一些改变; OP 的示例重复数字,但并非所有数字都至少出现一次。
    • @Shiva 对不起,您是否正确阅读了这个问题? OP 说“其中一半具有任意排序的数字,一半应具有给定范围内的随机数”。
    • 请记住,random.randint(0, 10) 将返回一个从 0 到 10(含)的整数。从问题来看,OP 似乎需要 1-10 范围内的整数,包括 1-10。
    【解决方案3】:

    有什么问题:

    import random
    
    your_array = list(range(1, 11)) + random.sample(range(1, 11), 10)  
    #  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 7, 8, 2, 1, 9, 5, 10, 6, 4]
    

    在第二次阅读...如果您想在第二部分重复,您可以这样做:

    your_array = list(range(1, 11)) + [random.randrange(1, 11) for _ in range(10)]
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 8, 1, 5, 1, 10, 5, 2, 10]
    

    【讨论】:

    • @Shiva 他为什么要这么做? OP 希望第一部分维持秩序
    • @Shiva 标题可能具有误导性。见过不止一次。
    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多