Как выбрать 1000+ случайных пикселей изображения, чтобы они не совпадали?
Имеется изображение размером 1920x1080. Для него есть 2 переменные - width = 1920 и height = 1080.
Нужно сгенерировать больше 1000 неповторяющихся сочетаний координат x и y, которые генерируются следующим образом:
from random import randint
x = randint(1, width-1)
y = randint(1, height-1)
coord = (x, y)
Так вот мне нужно получить список в котором будет хотя бы 1000 таких неповторяющихся значений.
Пример
[(1, 1), (22, 234), (41, 12)] ...
Как будет правильно такое реализовать? Я чувствую, что это можно сделать как-то просто, но мне на ум приходит только 2 решения:
- Генерировать случайное сочетание, затем проверять, есть ли оно в массиве и если есть то генерировать заново. Что-то такое, но в один момент рекурсия достигает максимума
coords = []
def generate():
global coords
x = randint(1, width-1)
y = randint(1, height-1)
key = (x, y)
if key not in coords:
coords.append(key)
return key
else:
return generate()
- Второй вариант - еще более глупый. Сразу же генерировать список всех возможных координат и затем выбирать случайные из них с последующим удалением. Разумеется, любое крупное изображение сразу же вешает программу на пару минут.
Ответы (2 шт):
В общем, пока писал вопрос, ответ сам пришел в голову :)
Я думаю, что стоит оставить эту тему для других пользователей. Ниже я приведу свое решение, и все же буду ждать других ответов, может это можно сделать как-то еще проще)
Если функция вылетает из-за рекурсии, можно просто убрать ее и оставить цикл while
coords = []
x = randint(1, width-1)
y = randint(1, height-1)
key = (x, y)
while key in coords:
x = randint(1, width-1)
y = randint(1, height-1)
key = (x, y)
coords.append(key)
from random import sample
width = 1920
height = 1080
coords = [divmod(i, height) for i in sample(range(width * height), 1000)]
print(coords)