Python пытается удалить удаленное число из массива

Есть код:

import numpy as np
import random
def solve_puzzle():
    a = 7
    b = 7
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    str = []
    for i in range(a):
        str.append([])
        for j in range(b):
            x = random.randint((min(numbers)), max(numbers))
            str[i].append(x)
            numbers.remove(x)
            print(x)
            
            
            

    print(np.array(str))     

solve_puzzle() 

Я хочу сделать так, чтобы выводилась матрица из 7 строк по 7 чисел в каждой, причем числа в строке не должны повторятся. Пытался сначала добавлять число в строку, а затем удалять его из списка тех, которые нужно добавить. Однако Python выкатывает ошибку ValueError list.remove(x): x not in list.

Как можно исправить?


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

Автор решения: CrazyElf
x = random.randint((min(numbers)), max(numbers))

После удаления элементов из numbers никто вам не гарантирует, что в нём есть любой из элементов между минимальным и максимальным, там вполне могут быть пропуски. Пример:

[1, 9]

В этом массиве есть только минимальный элемент 1 и максимальный 9, а ничего остального между ними просто нет.

Чтобы выбрать произвольный элемент из numbers используйте другой метод:

x = random.choice(numbers)

Хотя это не исправит остальные проблемы вашего алгоритма, с которыми вам ещё предстоит разобраться. Но конкретно эту проблему - исправит.

→ Ссылка