Estoy tratando de convertir una entrada determinada en una lista que contiene listas como se muestra en el código de línea de comandos a continuación:

matrix = input('asking')
asking[[2, 0, 4],[1, 2, 4],[4, 4, 2]]
matrix
'[[2, 0, 4],[1, 2, 4],[4, 4, 2]]'

Salida deseada:

[[2,0,4],[1,2,4],[4,4,2]]

Intentos

list(matrix)
['[', '[', '2', ',', ' ', '0', ',', ' ', '4', ']', ',', ' ', '[', '1', ',', ' ', '2', ',', ' ', '4', ']', ',', ' ', '[', '4', ',', ' ', '4', ',', ' ', '2', ']', ']']

x = [int(a) for a in matrix] 
builtins.TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

matrix.split(',')
['[[2', '0', '4]', '[1', '2', '4]', '[4', '4', '2]]']

Código:

fin_result = 0

def perform_check():
    print("Enter form \n [[a,b,c] \n [d,e,f] \n [g,h,i]]")
    #ask_for_input = [[4,-1,1],[4,5,3],[-2,0,0]]
    ask_for_input = [[2,0,4],[1,2,4],[4,4,2]]
    print(type(ask_for_input))

    #call function to cont
    calculate_determinate_matrix(ask_for_input)


def calculate_determinate_matrix(matrix3x3):
    matrix_list2x2 = []

    matrix_list2x2.append([[matrix3x3[1][1], matrix3x3[1][2]], [matrix3x3[2][1], matrix3x3[2][2]]])

    matrix_list2x2.append([[matrix3x3[1][0], matrix3x3[1][2]],[matrix3x3[2][0], matrix3x3[2][2]]])

    matrix_list2x2.append([[matrix3x3[1][0], matrix3x3[1][1]],[matrix3x3[2][0], matrix3x3[2][1]]])

    count = 0
    for count, matrix_2x2 in enumerate(matrix_list2x2):
        if count % 2 == 1:
            calculate_2x2_matrix(matrix_2x2, matrix3x3[0][count] * -1)
        else:
            calculate_2x2_matrix(matrix_2x2, matrix3x3[0][count])

def calculate_2x2_matrix(matrix, mult):
    global fin_result
    result = matrix[0][0] * matrix[1][1]
    result_2 = matrix[0][1] * matrix[1][0]
    fin_result += mult * (result - result_2)    

def main():
    perform_check()
    print(fin_result)

if __name__ == "__main__":
    main()

Claramente, este código necesita trabajo, pero no puedo entenderlo en términos de comprensión de listas.

1
Snuffles 14 nov. 2017 a las 13:19

2 respuestas

La mejor respuesta

Utilice el método json loads():

matrix = '[[2, 0, 4],[1, 2, 4],[4, 4, 2]]'
matrix = json.loads(matrix)
type(matrix)
<type 'list'>

Y en caso de que desee verificar si hay errores en la entrada, puede envolverlo en try-except:

try:
    matrix = json.loads(matrix)
except ValueError:
    #code goes here
2
zipa 14 nov. 2017 a las 10:25

Una alternativa a json.loads es ast.literal_eval. Tiene la ventaja de que reconoce la sintaxis de Python incluso si era JSON no válido, como cadenas de comillas simples. En tu caso exacto, no importa:

import ast
matrix = '[[2, 0, 4],[1, 2, 4],[4, 4, 2]]'
matrix = ast.literal_eval(matrix)
0
L3viathan 14 nov. 2017 a las 10:27