all
по существу просто делает:
def all(iterable):
for item in iterable:
if not item:
return False
return True
Это означает, что он просто проверит, являются ли все values
«правдивыми», в вашем случае все значения равны != 0
, поэтому они считаются истинными итак:
>>> all(my_counter.values())
True
Но True
(который ведет себя как целое число 1
) не > 1
, поэтому результат будет False
:
>>> all(my_counter.values()) > 1
False
Что выЕсли вы хотите проверить, является ли каждое значение больше единицы, то вы можете либо просто использовать самописный вариант all
:
def all_greater_than_one(iterable):
for item in iterable:
if item <= 1:
return False
return True
>>> all_greater_than_one(my_counter.values())
True
, либо использовать выражение генератора для «преобразования» итерируемой переменной, переданной вall
:
>>> all(value > 1 for value in my_counter.values())
True
Обратите внимание, что вы также можете использовать здесь списочное понимание вместо выражения генератора:
>>> all([value > 1 for value in my_counter.values()])
True
Или каким-то другим способом преобразовать его - яне рекомендую следующее, потому что генератор или понимание, как правило, лучше, просто чтобы показать некоторые альтернативы:
>>> all(map(lambda x: x > 1, my_counter.values()))
True
>>> all(map((1).__le__, my_counter.values())) # avoid this, just here for entertainment.
True