Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if something is a list

Tags:

What is the easiest way to check if something is a list?

A method doSomething has the parameters a and b. In the method, it will loop through the list a and do something. I'd like a way to make sure a is a list, before looping through - thus avoiding an error or the unfortunate circumstance of passing in a string then getting back a letter from each loop.

This question must have been asked before - however my googles failed me. Cheers.

like image 860
Federer Avatar asked Apr 15 '10 13:04

Federer


People also ask

How do I check if an item has a list?

To check if the item exists in the list, use Python “in operator”. For example, we can use the “in” operator with the if condition, and if the item exists in the list, then the condition returns True, and if not, then it returns False.

How do you check if an item is a list Python?

Given an object, the task is to check whether the object is list or not. if isinstance (ini_list1, list ): print ( "your object is a list !" )

How do you check a list type?

The most straightforward way to check if an object is of type list is to use Python's built-in type() function that returns the type of the object passed into it. You can then use the equality operator to compare the resulting type of the object with the list using the expression type(object) == list .

How do you check if an element is not in a list Python?

“not in” operator − This operator is used to check whether an element is not present in the passed list or not. Returns true if the element is not present in the list otherwise returns false.


2 Answers

To enable more usecases, but still treat strings as scalars, don't check for a being a list, check that it isn't a string:

if not isinstance(a, basestring):     ... 
like image 105
Ants Aasma Avatar answered Sep 25 '22 07:09

Ants Aasma


Typechecking hurts the generality, simplicity, and maintainability of your code. It is seldom used in good, idiomatic Python programs.

There are two main reasons people want to typecheck:

  1. To issue errors if the caller provides the wrong type.

    This is not worth your time. If the user provides an incompatible type for the operation you are performing, an error will already be raised when the compatibility is hit. It is worrisome that this might not happen immediately, but it typically doesn't take long at all and results in code that is more robust, simple, efficient, and easier to write.

    Oftentimes people insist on this with the hope they can catch all the dumb things a user can do. If a user is willing to do arbitrarily dumb things, there is nothing you can do to stop him. Typechecking mainly has the potential of keeping a user who comes in with his own types that are drop-in replacements for the ones replaced or when the user recognizes that your function should actually be polymorphic and provides something different that can accept the same operation.

    If I had a big system where lots of things made by lots of people should fit together right, I would use a system like zope.interface to make testing that everything fits together right.

  2. To do different things based on the types of the arguments received.

    This makes your code worse because your API is inconsistent. A function or method should do one thing, not fundamentally different things. This ends up being a feature not usually worth supporting.

    One common scenario is to have an argument that can either be a foo or a list of foos. A cleaner solution is simply to accept a list of foos. Your code is simpler and more consistent. If it's an important, common use case only to have one foo, you can consider having another convenience method/function that calls the one that accepts a list of foos and lose nothing. Providing the first API would not only have been more complicated and less consistent, but it would break when the types were not the exact values expected; in Python we distinguish between objects based on their capabilities, not their actual types. It's almost always better to accept an arbitrary iterable or a sequence instead of a list and anything that works like a foo instead of requiring a foo in particular.

As you can tell, I do not think either reason is compelling enough to typecheck under normal circumstances.

like image 40
Mike Graham Avatar answered Sep 25 '22 07:09

Mike Graham