使用1-12生成24个数字,仅重复每个数字一次

时间:2016-07-15 16:44:22

标签: python

这是我写的代码:

import random
numberList = []
while len (numberList) != 24:
    number = random.randint (1, 12)
    if numberList.count (number) < 2
        numberList.append (number)

我的问题是While循环可以在填充numberList之前循环超过100次,因此非常低效。

是否有更清晰,更有效的方式来编码我想要做的事情?

5 个答案:

答案 0 :(得分:5)

import random
my_list = range(1,13)*2
random.shuffle(my_list)

答案 1 :(得分:1)

reduce(lambda x,y:x+y,[ [i]*2 for i in range(1,13) ])

输出:

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

答案 2 :(得分:0)

您可以跟踪已添加两次的号码,并将其从数字源中删除。因此,不需要使用randomint(1,12),而是需要修改它以从整数列表中随机选择。

答案 3 :(得分:0)

以下是一些适用于Python 2和3的代码(range是3中的生成器,必须手动转换为list):

import random

number_list = list(range(1,13)) * 2
random.shuffle(number_list)

print(number_list)
# [9, 5, 11, 6, 3, 4, 9, 7, 4, 6, 3, 11, 1, 
#  12, 8, 10, 7, 2, 1, 8, 2, 5, 10, 12]

答案 4 :(得分:0)

我认为这可能是解决方案:

    import numpy as np
    import random

    myArray=np.append((random.sample(range(1,13), 12)),(random.sample(range(1,13), 12)))
    print myArray