[英]IndexError: list index out of range, when i create a matrix
我正在做一個家庭作業程序,需要創建一個矩陣,我執行了將帶有一些記錄(以前創建)的數組作為參數的函數,但是當我創建大量記錄時,例如: 100條記錄,我得到列表索引超出范圍
數組創建:
def crearVector(n):
vec = [None] * n
for i in range(len(vec)):
codigo = random.randint(1, 1000)
precio = round(random.uniform(1, 100000), 2)
ubicacion = random.randint(1, 23)
estado = random.randint(0, 1)
cantidad = random.randint(0, 1000)
puntuacion = random.randint(1, 5)
publicacion = Publicacion(codigo, precio, ubicacion, estado, cantidad, puntuacion)
vec[i] = publicacion
return vec
數組創建函數調用:
def test():
n = validateHigherThan(0)
vec = crearVector(n)
矩陣創建和顯示功能:
mat = crearMatriz(vec)
forma = int(input("How would you like to show the matrix?(0: matrix, 1: list): "))
if forma == 1:
mostrarMatrizLista(mat)
elif forma == 0:
mostrarMatriz(mat)
矩陣創建:
def crearMatriz(vec):
mat = [[0] * 5 for i in range(23)]
for i in range(len(vec)):
fil = vec[i].ubicacion
col = vec[i].puntuacion-1
mat[fil][col] += 1
return mat
您創建一個23 * 5的矩陣
fil = vec[i].ubicacion
應該
fil = vec[i].ubicacion-1
因為ubicacion可以具有1到23之間的隨機數。
更好的是,您可以使用全局變量來定義這些參數,而不是在兩個函數中對其進行硬編碼。
col_limit = 5
fil_limit = 23
def crearVector(n):
vec = [None] * n
for i in range(len(vec)):
codigo = random.randint(1, 1000)
precio = round(random.uniform(1, 100000), 2)
ubicacion = random.randint(1, fil_limit)
estado = random.randint(0, 1)
cantidad = random.randint(0, 1000)
puntuacion = random.randint(1, col_limit)
vec[i] = Publicacion(codigo, precio, ubicacion, estado, cantidad, puntuacion)
return vec
def crearMatriz(vec):
mat = [[0] * col_limit for i in range(fil_limit)]
for i in range(len(vec)):
fil = vec[i].ubicacion - 1
col = vec[i].puntuacion- 1
mat[fil][col] += 1
return mat
我相信您在矩陣上的fil列的ubicacion上缺少-1。 請參見下面的代碼。 定義以0開頭的列時要小心。
# ubicacion = random.randint(1, 23) (range is 1 to 23)
def crearMatriz(vec):
mat = [[0] * 5 for i in range(23)]
for i in range(len(vec)):
fil = vec[i].ubicacion-1 # <- this -1 is what you were missing, when ubicacion = 23 list goes out of range.
col = vec[i].puntuacion-1
mat[fil][col] += 1
return mat
另外,我認為您的程序確實不是那么需要易讀性,因為它是一項家庭作業,但是,例如,使用一些變量來幫助您定義最大范圍對於調試很有幫助。
import random
CODIGO_MAX = 1000
PRECIO_MAX = 100000
UBICACION_MAX = 23
ESTADO_MAX = 1
CANTIDAD_MAX = 1000
PUNTUACION_MAX = 5
def crearVector(n):
vec = [None] * n
for i in range(len(vec)):
codigo = random.randint(1, CODIGO_MAX)
precio = round(random.uniform(1, PRECIO_MAX), 2)
ubicacion = random.randint(1, UBICACION_MAX)
estado = random.randint(0, ESTADO_MAX)
cantidad = random.randint(0, CANTIDAD_MAX)
puntuacion = random.randint(1, PUNTUACION_MAX)
publicacion = Publicacion(codigo, precio, ubicacion, estado, cantidad, puntuacion)
vec[i] = publicacion
return vec
def crearMatriz(vec):
mat = [[0] * PUNTUACION_MAX for i in range(UBICACION_MAX)]
for i in range(len(vec)):
fil = vec[i].ubicacion-1
col = vec[i].puntuacion-1
mat[fil][col] += 1
return mat
crearMatriz(crearVector(1000))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.