Tuesday, 28 March 2017

python - What is the best way to check if a variable is a list?




I found this 3 ways to check it, but I don't know which of them is the best:




x = ['Bla', 'Bla', 'Bla', 'etc']

if isinstance(a, list): print('Perfect!')
if type(a) is list: print('Incredible!')
if type(a) == type([]): print('Awesome!')


Which of these is better?




Also, Can I use these ways to check whether an x is a string, tuple, dictionary, int, float, etc? If this is possible, in the first two methods do I have to convert a list to a tuple, string, dictionary, int, float, etc (no?), but in the third? I have to use (), {}, '', and what more for int and float?


Answer



These all express different things, so really it depends on exactly what you wish to achieve:




  • isinstance(x, list) check if the type of x is either list or has list as a parent class (lets ignore ABCs for simplicity etc);

  • type(x) is list checks if the type of x is precisely list;

  • type(x) == list checks for equality of types, which is not the same as being identical types as the metaclass could conceivably override __eq__




So in order they express the following:




  • isinstance(x, list): is x like a list

  • type(x) is list: is x precisely a list and not a sub class

  • type(x) == list: is x a list, or some other type using metaclass magic to masquerade as a list.


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...