TypeError: unsupported operand type(s) for -: 'list' and 'list'

146,580

Solution 1

You can't subtract a list from a list.

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

Simple way to do it is using numpy:

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

You can also use list comprehension, but it will require changing code in the function:

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

Solution 2

Use Set in Python

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

Solution 3

The operations needed to be performed, require numpy arrays either created via

np.array()

or can be converted from list to an array via

np.stack()

As in the above mentioned case, 2 lists are inputted as operands it triggers the error.

Share:
146,580
Iliass
Author by

Iliass

I try to learn something new every time I get the occasion;

Updated on November 21, 2020

Comments

  • Iliass
    Iliass over 3 years

    I am trying to implement the Naive Gauss and getting the unsupported operand type error on execution. Output:

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

    This is the 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]])