Me gustaría crear una lista en la que se coloca un nuevo valor en cada iteración. La lista debe tener dimensiones 3x4 (3 filas, 4 columnas). Quiero iterar x, y para cada x, la lista debe llenarse verticalmente con tres valores. (Por lo tanto, cuando x = 1, me gustaría llenar la primera posición del índice [1, 1] de la lista con el valor porcentaje_a . porcentaje_b luego debería llenar la columna 1 (ya que x sigue siendo 1) y la fila 2. Lo mismo para porcentaje_c para la columna 1, fila 3). Luego, x aumenta en uno, y la segunda columna de la lista debe completarse y así sucesivamente. Tengo el código de la siguiente manera:

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))
        

Desearía un resultado como este:

[0.5 0.5 0.5 0.5
0.25 0.25 0.25 0.25
0.25 0.25 0.25 0.25]

Estoy abierta a hacer esto de cualquier manera (lista, numpy)

0
licm 25 ago. 2020 a las 16:38

2 respuestas

La mejor respuesta

Usando listas anidadas:

Cada lista interna es una fila. En Python y la mayoría de los otros lenguajes de programación, el índice de matrices / listas / etc. comienza con 0, no 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)

El resultado de l será entonces:

[[0.5, 0.5, 0.5, 0.5],
 [0.25, 0.25, 0.25, 0.25],
 [0.25, 0.25, 0.25, 0.25]]
1
Wups 25 ago. 2020 a las 14:11

Puedes hacer algo como esto

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

Esto devuelve una matriz numpy 2D

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]])

Tenga en cuenta que puede convertirlo en una lista de listas usando l.tolist() o acoplar su salida a una sola lista usando l.flatten() dependiendo de lo que realmente necesite.

1
Stefan 25 ago. 2020 a las 14:07