Есть ли способ добавить все, что удовлетворяет условию в сокращенном вложенном цикле? Моя следующая попытка оказалась неудачной:Подсчитать все, что удовлетворяет условию в Python
count += 1 if n == fresh for n in buckets['actual'][e] else 0
Есть ли способ добавить все, что удовлетворяет условию в сокращенном вложенном цикле? Моя следующая попытка оказалась неудачной:Подсчитать все, что удовлетворяет условию в Python
count += 1 if n == fresh for n in buckets['actual'][e] else 0
Использование sum
с выражением генератора:
sum(n == fresh for n in buckets['actual'][e])
как True == 1
и False == 0
, поэтому else
не требуется.
Связанные гласит: Is it Pythonic to use bools as ints? , Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language?
Использование sum()
функции:
sum(1 if n == fresh else 0 for n in buckets['actual'][e])
или:
sum(1 for n in buckets['actual'][e] if n == fresh)
Если вы чувствуете себя неуютно неявно используя тот факт, что 'Правда == 1' и' Ложная == 0 ', вы можете сделать этот факт явно, делая 'Int (n == fresh) '. Это полезно только для того, чтобы сделать код более очевидным ... язык не волнует. – SethMMorton
Конечно, но есть также строка [Явная лучше, чем неявная] (http://www.python.org/dev/peps/pep-0020/). Мне лично все равно, но это было на случай, если у OP будет реакция на неявное использование 'bool' as 'int'. Чтобы быть ясным, я не говорю, что вы ошибаетесь ... мой комментарий был добавлением, предназначенным для OP, в случае, если они хотели сделать более самодокументирующий код. – SethMMorton