#python #random
Вопрос:
Допустим, я хочу рандомизировать два раза из набора 1:1000. Я хочу сделать выборку два раза по 100 чисел, тогда как во второй раз я не могу выбрать числа, нарисованные на первом рисунке.
Моя работа до сих пор
import random random.seed(42) idx = [random.randint(0, 1000) for p in range(0, 100)]
И теперь я не уверен, как я могу удалить рандомизированные индексы с чисел от 0 до 999. Я пытался сделать:
without_idx = range(0, 999).remove(idx)
но я получил ошибку AttributeError: 'range' object has no attribute 'remove'
Не могли бы вы, пожалуйста, помочь мне в решении этой проблемы?
Комментарии:
1. Попробуйте завернуть это в список
without_idx = list(range(0, 999)).remove(idx)
2. Я уже пробовал, но затем возникает эта ошибка:
list.remove(x): x not in list
Ответ №1:
Вы можете использовать:
import random idx = random.sample(range(1000), 200) idx1 = idx[100:] idx2 = idx[:100]
Вы можете выбрать 200 номеров сразу, что гарантирует два набора из 100 без каких-либо конфликтов, затем вы можете разделить этот список на два
Если вы хотите, чтобы числа можно было дублировать внутри одного набора, но не между обоими наборами, вы бы сделали это:
import random def avoid_conflict(excluded): if (value := random.randint(0, 1000)) in excluded: return avoid_conflict(excluded) return value initial = [random.randint(0, 1000) for _ in range(100)] next_set = [avoid_conflict(initial) for _ in range(100)]
Имейте в виду, что вы также можете использовать avoid_conflict([])
, если хотите, в начальной части, если хотите, чтобы код выглядел немного лучше, но он был бы немного менее эффективным.