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

import random
import numpy
N = random.randint(1, 10000)
spam = list(range(1, N + 1))
n = [spam]
K = random.randint(1, 100)
spam1 = list(range(1, K + 1))
k = [spam1]
b = []
numpy.random.randint(1, 2 * 10 ^ 9, n).tolist()
print(n)
print(k)
print(b)

ошибка:

Traceback (most recent call last):
  File "C:/Users/DX1/PycharmProjects/pythonProject1/main.py", line 10, in <module>
    numpy.random.randint(1, 2 * 10 ^ 9, n).tolist()
  File "mtrand.pyx", line 746, in numpy.random.mtrand.RandomState.randint
  File "_bounded_integers.pyx", line 1320, in numpy.random._bounded_integers._rand_int32
TypeError: 'list' object cannot be interpreted as an integer

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

Автор решения: CrazyElf
spam = list(range(1, N + 1))
n = [spam]
...
numpy.random.randint(1, 2 * 10 ^ 9, n).tolist()

Итак, что у вас в переменных, и что требует функция randint:

  • spam - список (list)
  • n - список в списке
  • третий параметр функции randint - это size, т.е. размер создаваемого случайного массива, либо список размеров, если это многомерный массив

Так вот, randint не понимает, как ему интерпретировать список в списке в данном случае. Если убрать одну вложенность и оставить просто список, то будет чуть лучше, но всё-равно скорее всего будет ошибка типа такой:

n = spam
...
ValueError: maximum supported dimension for an ndarray is 32, found 1866

Ну то есть максимум в size может быть 32 значения, и это будет 32-мерный массив, а если передать более длинный список размеров, то всё-равно будет ошибка, хотя и другая.

Так что вы сначала определитесь - что вы вообще делаете. Обычно нужен всё-таки одномерный массив и тогда в n должно быть число, а не список. Может вы там имели в виду N, а не n, например? Такой код выполняется без ошибки, хотя вы никуда результат и не присваиваете:

numpy.random.randint(1, 2 * 10 ^ 9, N).tolist()
→ Ссылка