Список списков (двойной [[) в 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. ]])]. Как мне это сделать?

Если вам нужны списки, почему вы используете numpy.arange — функцию, которая не создает списки?

user2357112 02.06.2024 02:27

Что бы вы использовали? Спасибо!

Hans 02.06.2024 02:41

Зависит от того, почему вы вообще используете NumPy и действительно ли вам нужны списки. Похоже, вы не понимаете разницу между списками и массивами и что означают все эти символы, которые вы видите.

user2357112 02.06.2024 02:47

Если вы используете NumPy просто потому, что он кажется удобным способом создания этих списков, то я, вероятно, вместо этого напишу генератор списков. Если вам действительно нужно использовать функциональность NumPy, то я бы вместо этого использовал numpy.linspace для создания строки (избегая проблем с округлением, которые возникают при использовании numpy.arange для этого), а затем использовал бы что-то вроде numpy.tile чтобы повторить эту строку в 2D-массиве.

user2357112 02.06.2024 02:49

Вот один список: [i * 0.05 for i in range(25*20 + 1)]

Mateen Ulhaq 02.06.2024 02:51
[[i*5/100 for i in range(501)] for _ in range(9)]
Mark Tolonen 02.06.2024 06:13
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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)]

Другие вопросы по теме