【问题标题】:pick a random number not in a list选择不在列表中的随机数
【发布时间】:2016-03-26 02:27:52
【问题描述】:

我有一个清单:

> 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

我没有尝试列表理解

【问题讨论】:

  • m + 1 有什么问题?
  • 或者,如果它是整数的list,并且随机数不必是整数,0.5 可以工作。
  • 你是对的。我需要为数字范围添加 m+1
  • 可能是因为你花了 20 分钟才真正说出你要找的东西。
  • @Paddy 你感到惊讶吗?一个不清楚的问题是一个糟糕的问题,就这么简单。

标签: python arrays random


【解决方案1】:

如果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)))

【讨论】:

    【解决方案2】:

    这是我能想到的最简单的方法:

    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])
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 2021-12-15
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多