У меня есть список:
> 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 ответа
Если 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)))
Это самая простая вещь, которую я мог придумать:
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])
Просто вырвал что-то из моего проекта
while True:
self.uid = random.randint(0,100000)
if not(self.uid in item_uids):
break
Схематичное решение, но оно работает.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.