Python列表没有重复的数字

时间:2013-03-16 22:32:12

标签: python

我正在使用宾果卡,但我似乎无法使用randint生成不同的数字。这次它可能在b中有所有不同的数字,但下一次,它有几个重复的数字。

如何制作不同的数字而不重复?

感谢。

import random

class Card:
    def __init__(self):
        self.b = []
        self.i = []
        self.n = []
        self.g = []
        self.o = []

        for x in range(0, 5):
            r = random.randint(1, 15)
            self.b.append(r)

        print(self.b)
        print(self.i)
        print(self.n)
        print(self.g)
        print(self.o)

p = Card()

5 个答案:

答案 0 :(得分:5)

来自this answer

self.b = random.sample(range(1, 16), 5)

答案 1 :(得分:2)

他的:

while len(self.b) < 5:
  r = random.randint(1, 15)
  if not r in self.b:
    self.b.append(r)

答案 2 :(得分:1)

如果你选择1到15之间的五个随机整数,你可能会得到一些重复。您可以尝试选择而无需替换:

self.b = random.sample(range(1,16),5)

答案 3 :(得分:0)

除了sample中的random之外,您还可以使用choice函数,如果您拥有numpy 1.7.0中的新功能:

from numpy import random
self.b = list(random.choice(range(1,16), size=5, replace=False))

它的优点在于它采用可选参数p,其涉及与群体中的每个条目相关联的概率。在你的情况下这是统一的,这是默认的。

答案 4 :(得分:0)

您可以使用np.random.shuffle来修改数组

>>> a = np.arange(1,16)
>>> np.random.shuffle(a)
>>> a[0:5]
array([ 9, 11,  7,  4, 10])
>>> np.random.shuffle(a)
array([ 3,  1, 13,  5,  8])

所以也许像

>>> class Card:
      def __init__(self,arr):
        np.random.shuffle(arr)
        self.b = arr[0:5]
        #etc

>>> nums = np.arange(1,16)
>>> p = Card(nums)
>>> p.b
array([ 8,  2,  6, 13,  9])