Задача с двумя списками

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

Существует список currentGrid. В нем 24 значения. Эти значения меняются после каждого нажатия левой кнопки мыши. Меняются определенным образом. До первого нажатия список выглядит так:

currentGrid = [40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

24 значения, и все равны 40.

После первого клика, первый элемент со значением 40 изменяется, на какое-то случайное число.

currentGrid = [77, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

После второго клика, второй элемент со значением 40 изменяется, на какое-то случайное число.Это может быть тоже самое число, а может и нет.

currentGrid = [77, 77, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

После третьего клика, первый и второй элемент изменяется обратно на 40, но "открывается" третий элемент.Число также случайно.

currentGrid = [40, 40, 56, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

И так далее: каждый четный клик открывается один элемент.

Каждый нечетный клик пропадают два предыдущих элемента и открывается один новый.

"Пропадает" = Значение элемента становится равно 40.

"Появляется" = Значение элемента становится отлично от 40.

Наконец-то к проблеме.

Нужно определенным образом записывать значения из currentGrid в другой список, назовем его saveGrid. В saveGrid значения должны как-бы "сохраняться".

Привожу пример:

Элементы со значением 40 должны игнорироваться.

Первый клик:

currentGrid = [77, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

saveGrid = [77]

Второй клик:

currentGrid = [77, 92, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

saveGrid = [77, 92]

Третий клик:

currentGrid = [40, 40, 67, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

saveGrid = [77, 92, 67]

Четвертый клик :

currentGrid = [40, 40, 67, 89, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

saveGrid = [77, 92, 67, 89]

Пятый клик :

currentGrid = [40, 40, 40, 40, 11, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]

saveGrid = [77, 92, 67, 89, 11]

И так далее.

Также, список должен соблюдать порядок (не перемешивать все местами) , список должен вмещать в себя 24 значения.

Забыл упомянуть!

24 значения - это 12 пар. То есть уникальных чисел 12, но у каждого есть пара, в сумме 24.

Напоминаю цель:

Нужно определенным образом записывать значения из currentGrid в другой список, назовем его saveGrid. В saveGrid значения должны как-бы "сохраняться".

Основная часть кода:

def getGrid():
 saveGrid = []
 currentGrid = []
 state_left = win32api.GetKeyState(0x01)
 while 1:
    a = win32api.GetKeyState(0x01)
    if a != state_left: 
       state_left = a
       if a == 1 or a == 0 :
          time.sleep(0.3)
          image = ImageGrab.grab()
          for cord in Cords.cordArray:
           r, g, b = image.getpixel(cord)
           currentGrid.append(b)
          print(currentGrid)
          currentGrid.clear()
        
getGrid()

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

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

При открывании элемента он тут же пишется во второй список:

saveGrid.append(currentGrid[ClickNumber-1])

Чтобы отображалось только финальное состояние saveGrid, можно поставить проверку на номер клика или достижение нужной длины

if len(saveGrid) == 24:
    печатать
→ Ссылка