Есть несколько решений, так что вы можете выбрать свой яд.Предполагая, что a
- это список из 100 None
с, вот некоторые из них, которые я могу придумать (отсортированные по производительности на моей машине):
Использование set
:
def only_element(element, ls):
return set(ls) == set([element])
Время:
$ python -m timeit 'set(a) == set([None])'
100000 loops, best of 5: 3.06 µs per loop
Использование all
:
def only_element(element, ls):
return all([item == element for item in ls])
Время:
$ python -m timeit 'all([item == None for item in a])'
50000 loops, best of 5: 8.81 usec per loop
Использование for
цикл:
def only_element(element, ls):
for item in ls:
if item != element:
return False
return True
Время:
$ python -m timeit 'for item in a:\n if item != None:\n break'
100000 loops, best of 5: 9.16 µs per loop
Использование filter
:
def only_element(element, ls):
return len(list(filter(lambda x: x != element, ls))) == 0
Время:
$ python -m timeit 'len(list(filter(lambda x: x != None, a))) == 0'
10000 loops, best of 5: 20.8 usec per loop
Что взять с собой?
Обычно есть встроенная функция, которая лучше соответствует вашим потребностям и работает быстрее (и с меньшим количеством кода), чем если бы вы использовали for
петля.