#python #arrays #list #for-loop #indexing
#python #массивы #Список #for-цикл #индексирование
Вопрос:
Я хотел бы создать список, в который на каждой итерации помещается новое значение. Список должен иметь размеры 3×4 (3 строки, 4 столбца). Я хочу повторить x, и для каждого x список должен быть заполнен вертикально тремя значениями. (Таким образом, когда x = 1, я хотел бы заполнить первую позицию индекса [1, 1] списка значением percentage_a. затемpercentage_b должен заполнить столбец 1 (поскольку x по-прежнему равен 1) и строку 2. То же самое для percentage_c для столбца 1, строки 3). Затем x увеличивается на единицу, и второй столбец списка должен быть заполнен и так далее. У меня есть следующий код:
list = []
for x in range(1, 4)
a = 2
b = 1
c = 1
sum = 4
percentage_a = a / 4
percentage_b = b / 4
percentage_c = c / 4
list.insert([x, 1], int(percentage_a))
list.insert([x, 2], int(percentage_b))
list.insert([x, 3], int(percentage_c))
Я бы хотел получить такой результат:
[0.5 0.5 0.5 0.5
0.25 0.25 0.25 0.25
0.25 0.25 0.25 0.25]
Я открыт для этого любым способом (list, numpy)
Ответ №1:
Использование вложенных списков:
Каждый внутренний список представляет собой одну строку. В Python и большинстве других языков программирования индекс массивов / списков / и т.д. начинается с 0, а не с 1.
l = [[],[],[]]
a = 2
b = 1
c = 1
percentage_a = a / 4
percentage_b = b / 4
percentage_c = c / 4
for i in range(4):
l[0].append(percentage_a)
l[1].append(percentage_b)
l[2].append(percentage_c)
Результатом l
тогда будет:
[[0.5, 0.5, 0.5, 0.5],
[0.25, 0.25, 0.25, 0.25],
[0.25, 0.25, 0.25, 0.25]]
Ответ №2:
Вы можете сделать что-то вроде этого
import numpy as np
a = 2
b = 1
c = 1
percentage_a = a / 4
percentage_b = b / 4
percentage_c = c / 4
## Option 1
l = np.empty(shape=(3,4))
for x in range(4):
l[:,x]=[percentage_a,percentage_b,percentage_c]
## Option 2, a bit shorter
l = np.array([[percentage_a,percentage_b,percentage_c] for i in range(4)]).T
Это возвращает 2D массив numpy
array([[0.5 , 0.5 , 0.5 , 0.5 ],
[0.25, 0.25, 0.25, 0.25],
[0.25, 0.25, 0.25, 0.25]])
Обратите внимание, вы можете преобразовать его в список списков, используя l.tolist()
или сгладить свой вывод до единого списка, используя l.flatten()
в зависимости от того, что вам действительно нужно.