У меня есть список:

> 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

Я не пытался понять список

0
Newbie 19 Дек 2015 в 16:53

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)))
3
TigerhawkT3 19 Дек 2015 в 14:31

Это самая простая вещь, которую я мог придумать:

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])
1
N. Wouda 19 Дек 2015 в 14:24

Просто вырвал что-то из моего проекта

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

Схематичное решение, но оно работает.

0
Ben Rauzi 18 Авг 2019 в 05:38