fork download
  1. def sameShape(m1, m2):
  2. '''Verificação manual se duas listas têm o mesmo formato'''
  3.  
  4. if type(m1) != type(m2):
  5. return False
  6.  
  7. if type(m1) == list:
  8. if len(m1) != len(m2):
  9. return False
  10.  
  11. for i in range(len(m1)):
  12. if not sameShape(m1[i], m2[i]):
  13. return False
  14.  
  15. return True
  16.  
  17. def soma_matrizes(m1, m2):
  18. if not sameShape(m1, m2):
  19. return False
  20. else:
  21. # Reduz a dimensão da matriz de 2 pra 1 (i.e. transforma em lista simples)
  22. # para facilitar a soma
  23. m1 = [i for j in m1 for i in j]
  24. m2 = [i for j in m2 for i in j]
  25.  
  26. # Calcula a soma item a item das duas listas
  27. s = [sum(t) for t in zip(m1, m2)] # <= usa `sum` em cada tupla
  28. #s = [i + j for i, j in zip(m1, m2)] # <== alternativa (talvez mais fácil de entender)
  29.  
  30. # Faz a lista de soma ter 2 dimensões antes de retornar
  31. k = int(len(s) / 2)
  32. return [s[:k], s[k:]]
  33.  
  34. m1 = [[1, 2, 3],[4, 5, 6]]
  35. m2 = [[2, 3, 4],[5, 6, 7]]
  36. print(soma_matrizes(m1, m2))
  37.  
  38. m1 = [[1], [2], [3]]
  39. m2 = [[2, 3, 4],[5, 6, 7]]
  40. print(soma_matrizes(m1, m2))
Success #stdin #stdout 0.02s 28384KB
stdin
Standard input is empty
stdout
[[3, 5, 7], [9, 11, 13]]
False