Как генерировать случайные числа, избегая при этом уже используемых чисел - PullRequest
1 голос
/ 12 августа 2011

Как мне сгенерировать случайные числа, но сделать так, чтобы числа избегали уже используемых чисел. У меня есть TXT-файл с тысячами наборов чисел, и мне нужно создать серию случайных чисел, избегая их.

IE, TXT - 0102030405
мое случайное число должно избегать этого числа.

на заметке, как я могу разделить 10-значный номер TXT на 5-значный номер? тогда как я могу генерировать случайные числа на основе этого.

Ответы [ 4 ]

1 голос
/ 12 августа 2011

Если вам нужно сохранить файл (что, я думаю, вам нужно, чтобы добавить новые числа), я бы посоветовал вам «забыть» использовать простой текстовый файл и использовать SQLite или любую другую встроенную БД, для которой выполняется резервное копирование в файле, поскольку вы, вероятно, не хотите загружать все числа в памяти.

"Функцией" (или, точнее, структурой данных), которую вы хотите использовать в SQLite, является B-Tree, так что вы можете быстро получать числа. Я говорю это, потому что вы также можете попытаться найти библиотеку, которая реализует B-Trees, и тогда вам не понадобится SQLite.

1 голос
/ 12 августа 2011

Вы можете загрузить все ранее найденные случайные числа в словарь, а затем просто проверить, находится ли new_random в словаре, и, если это, попробовать новое случайное число.хранится в переменной ten_digits.

ten_digits = '1234567890'

Вы можете разбить это на 5 двузначных чисел, выполнив

[x + y for x, y in zip(ten_digits[::2], ten_digits[1::2]
>>> ['12', '34', '56', '78', '90']
0 голосов
/ 12 августа 2011

Если ваш список относительно мал, вы можете загрузить его в набор и проверить это:

random_number not in number_set

Чтобы разделить число, вы можете использовать ломтики:

s='0102030405'
n=2
result = [s[i:i+n] for i in range(0, len(s), n)]
0 голосов
/ 12 августа 2011

Используете ли вы номера в качестве идентификаторов? Вам, вероятно, стоит изучить использование хеш-таблицы.

http://en.wikipedia.org/wiki/Hash_table

Я не очень знаком с Python, но я уверен, что есть функция подстроки, которую вы можете дать ей (в качестве аргумента) индекс для запуска подстроки и количество символов для копирования.

...