Как рандомизировать два раза, в то время как второй раз не совпадает с первым

#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([]) , если хотите, в начальной части, если хотите, чтобы код выглядел немного лучше, но он был бы немного менее эффективным.