Как выбрать 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 решения:

  1. Генерировать случайное сочетание, затем проверять, есть ли оно в массиве и если есть то генерировать заново. Что-то такое, но в один момент рекурсия достигает максимума
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()
  1. Второй вариант - еще более глупый. Сразу же генерировать список всех возможных координат и затем выбирать случайные из них с последующим удалением. Разумеется, любое крупное изображение сразу же вешает программу на пару минут.

Ответы (2 шт):

Автор решения: denisnumb

В общем, пока писал вопрос, ответ сам пришел в голову :)

Я думаю, что стоит оставить эту тему для других пользователей. Ниже я приведу свое решение, и все же буду ждать других ответов, может это можно сделать как-то еще проще)

Если функция вылетает из-за рекурсии, можно просто убрать ее и оставить цикл 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)

https://ideone.com/s0ptHY

→ Ссылка