选择一个不在列表中的随机数

时间:2015-12-19 13:53:50

标签: python arrays random

我有一个清单:

> S = [1,8,93,3,8]

我需要选择一个不在列表中但在最大值范围内的随机数。我更关心时间复杂度O(n)。 S可能是一个非常大的名单。

import random

S=[1,8,93,3,8]
m = max(S)
for x in xrange(m):
  rand = random.randint(1,m)
  if rand not in S:
      print rand
  else:
      print "Number - %d found in the array" % rand 
      break

我没有尝试列表理解

3 个答案:

答案 0 :(得分:3)

如果list由整数组成且任何数字都可以接受:

S = [1,8,93,3,8]
number = 0.5

如果数字必须是整数:

S = [1,8,93,3,8]
number = max(S) + 1

如果数字必须是list

中最大和最小元素之间的任意整数
S = [1,8,93,3,8]
number = next(iter(set(range(min(S)+1, max(S))) - set(S)))

如果数字必须是list中最大和最小元素之间的伪随机整数:

import random
S = [1,8,93,3,8]
number = random.choice(list(set(range(min(S)+1, max(S)))-set(S)))

答案 1 :(得分:1)

这是我能想到的最简单的事情:

import random

S=[1,8,93,3,8]
m = max(S)

not_in_S = random.choice([x for x in range(m) if x not in S])

答案 2 :(得分:0)

只是从我的项目中偷东西

while True: 
    self.uid = random.randint(0,100000)
    if not(self.uid in item_uids):
        break

粗略的解决方案,但是有效。