Home > Enterprise >  Getting error when trying to calculate the length of the array after sort in python
Getting error when trying to calculate the length of the array after sort in python

Time:09-22

I am totally confused on the below code execution,

a= [10,30,4]
a = a.sort()
r = len(a) - 1
print (r)

When the above code is executed I get
r = len(a) - 1 TypeError: object of type 'NoneType' has no len()

However the code runs fine if I find the length without sorting or when sorting the array after find the length. Is there any reason to this?

CodePudding user response:

a.sort() is an inplace operation. It modify list inplace and does not return anything. See the documentation for list.sort by typing help(list.sort) in your python interpreter.

>>> help([].sort)
Help on built-in function sort:

sort(*, key=None, reverse=False) method of builtins.list instance
    Sort the list in ascending order and return None.

    The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
    order of two equal elements is maintained).

So the point is, you should not assign the return value of listobject.sort() because it will always return None

CodePudding user response:

The value returned by a function sort is None

So when you are trying to assign a = a.sort() it is the same as a = None

Here is the reference to sorting basics

Your code should look like

a= [10,30,4]
a.sort()
r = len(a) - 1
print (r)

CodePudding user response:

In addition to the other answers, if you want a non-inplace function then you can run:

a = sorted(a)

  • Related