TypeError: niet-ondersteunde operandtype(s) voor -: ‘list’ en ‘list’

Ik probeer de Naive Gauss te implementeren en krijg de niet-ondersteunde operand-typefout bij uitvoering.
Uitgang:

 execfile(filename, namespace)
  File "/media/zax/MYLINUXLIVE/A0N-.py", line 26, in <module>
    print Naive_Gauss([[2,3],[4,5]],[[6],[7]])
  File "/media/zax/MYLINUXLIVE/A0N-.py", line 20, in Naive_Gauss
    b[row] = b[row]-xmult*b[column]
TypeError: unsupported operand type(s) for -: 'list' and 'list'
>>>   

Dit is de code

def Naive_Gauss(Array,b):
    n = len(Array)
    for column in xrange(n-1):
        for row in xrange(column+1, n):
            xmult = Array[row][column] / Array[column][column]
            Array[row][column] = xmult
            #print Array[row][col]
            for col in xrange(0, n):
                Array[row][col] = Array[row][col] - xmult*Array[column][col]
            b[row] = b[row]-xmult*b[column]
    print Array
    print b
print Naive_Gauss([[2,3],[4,5]],[[6],[7]])

Antwoord 1, autoriteit 100%

Je kunt een lijst niet van een lijst aftrekken.

>>> [3, 7] - [1, 2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'list' and 'list'

Een eenvoudige manier om dit te doen is door numpyte gebruiken:

>>> import numpy as np
>>> np.array([3, 7]) - np.array([1, 2])
array([2, 5])

U kunt ook lijstbegrip gebruiken, maar hiervoor moet de code in de functie worden gewijzigd:

>>> [a - b for a, b in zip([3, 7], [1, 2])]
[2, 5]

>>> import numpy as np
>>>
>>> def Naive_Gauss(Array,b):
...     n = len(Array)
...     for column in xrange(n-1):
...         for row in xrange(column+1, n):
...             xmult = Array[row][column] / Array[column][column]
...             Array[row][column] = xmult
...             #print Array[row][col]
...             for col in xrange(0, n):
...                 Array[row][col] = Array[row][col] - xmult*Array[column][col]
...             b[row] = b[row]-xmult*b[column]
...     print Array
...     print b
...     return Array, b  # <--- Without this, the function will return `None`.
...
>>> print Naive_Gauss(np.array([[2,3],[4,5]]),
...                   np.array([[6],[7]]))
[[ 2  3]
 [-2 -1]]
[[ 6]
 [-5]]
(array([[ 2,  3],
       [-2, -1]]), array([[ 6],
       [-5]]))

Antwoord 2, autoriteit 42%

Set gebruiken in Python

>>> a = [2,4]
>>> b = [1,4,3]
>>> set(a) - set(b)
set([2])

Antwoord 3, autoriteit 2%

De bewerkingen die moesten worden uitgevoerd, vereisen numpy-arrays die zijn gemaakt via

np.array()

of kan worden omgezet van een lijst naar een array via

np.stack()

Zoals in het bovengenoemde geval worden er 2 lijsten ingevoerd als operanden, waardoor de fout wordt geactiveerd.


Antwoord 4

Deze vraag is beantwoord, maar ik denk dat ik ook een andere mogelijke oorzaak moet noemen. Dit is een direct gevolg van het tegenkomen van dezelfde foutmelding, maar om verschillende redenen. Als uw lijst(en) leeg zijn, wordt de bewerking niet uitgevoerd. controleer je code op inspringingen en typefouten

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes