Python: determine if all items of a list are the same item
You could cheat and use set
:
def all_same( items ):
return len( set( items ) ) == 1 #== len( items )
or you could use:
def all_same( items ):
return all( map(lambda x: x == items[0], items ) )
or if you're dealing with an iterable instead of a list:
def all_same( iterable ):
it_copy = tee( iterable, 1 )
return len( set( it_copy) ) == 1
Best way to do this is to use Python sets.You need to define all_same
like this:
def all_same(items):
return len(set(items)) < 2
Test:
>>> def all_same(items):
... return len(set(items)) < 2
...
>>>
>>> property_list = ["one", "one", "one"]
>>> all_same(property_list)
True
>>> property_list = ["one", "one", "two"]
>>> all_same(property_list)
False
>>> property_list = []
>>> all_same(property_list)
True
I originally interpreted you to be testing identity ("the same item"), but you're really testing equality ("same value"). (If you were testing identity, use is instead of ==.)
def all_same(items):
it = iter(items)
for first in it:
break
else:
return True # empty case, note all([]) == True
return all(x == first for x in it)
The above works on any iterable, not just lists, otherwise you could use:
def all_same(L):
return all(x == L[0] for x in L)
(But, IMHO, you might as well use the general version—it works perfectly fine on lists.)
def all_same(items):
return all(x == items[0] for x in items)
Example:
>>> def all_same(items):
... return all(x == items[0] for x in items)
...
>>> property_list = ["one", "one", "one"]
>>> all_same(property_list)
True
>>> property_list = ["one", "one", "two"]
>>> all_same(property_list)
False
>>> all_same([])
True