Список списков (двойной [[) в Python

Это действительно простая вещь, но после прочтения документации я все еще не могу этого сделать. Я просто хочу создать список из 9 подсписков следующим образом

[[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25],[0, 0.05, 0.1, ..., 25]]

я делаю

[np.arange(0, 25.05, 0.05), np.arange(0, 25.05, 0.05), np.arange(0, 25.05, 0.05),
                 np.arange(0, 25.05, 0.05), np.arange(0, 25.05, 0.05), np.arange(0, 25.05, 0.05),
                 np.arange(0, 25.05, 0.05), np.arange(0, 25.05, 0.05), np.arange(0, 25.05, 0.05)]

но я получаю 24.9 , 24.95, 25. ])], хотя мне бы хотелось получить 24.9 , 24.95, 25. ]])]. Как мне это сделать?

🤔 А знаете ли вы, что...
Python был создан Гвидо ван Россумом и впервые выпущен в 1991 году.


69
2

Ответы:

Лучше всего использовать list():

step = 0.05
sublist = [round(i * step, 2) for i in range(int(25 / step) + 1)]
res = [sublist.copy() for _ in range(9)]
print(res)

Вы можете использовать tolist() с deepcopy():

import numpy as np
import copy

sublist = np.arange(0, 25.05, 0.05).tolist()
res = [copy.deepcopy(sublist) for _ in range(9)]

print(res)

Примечание

  • Однако это ненужный способ сделать это. Просто используйте list().

Решено

Вы можете создать такой список списков без numpy и преобразования диапазонов в списки и из них.

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

В приведенном ниже примере создается пример меньшего размера:

[[x/20 for x in range(int(1.05*20))] for _ in range(3)]

Результат:

[[0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0], [0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0], [0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]]

Итак, чтобы сгенерировать тот, который вы просили в исходном сообщении, будет:

[[x/20 for x in range(int(25.05*20))] for _ in range(9)]