Python: проверьте, все ли словари в списке пусты - PullRequest
8 голосов
/ 19 марта 2010

У меня есть список словарей. Мне нужно проверить, все ли словари в этом списке пусты. Я ищу простое утверждение, которое сделает это в одну строку.

Есть ли однострочный способ сделать следующее (не включая печать)?

l = [{},{},{}] # this list is generated elsewhere...
all_empty = True
for i in l:
  if i:
    all_empty = False

print all_empty

Несколько нововведений в python ... Я не знаю, есть ли встроенный способ, чтобы проверить это Заранее спасибо.

Ответы [ 3 ]

21 голосов
/ 19 марта 2010
all(not d for d in l)
10 голосов
/ 19 марта 2010

not any(d for d in l) может быть сокращено до not any(l) в этом случае.

9 голосов
/ 19 марта 2010

not any(d for d in l) эквивалентно закону Де Моргана - all(not d for d in l), но применяется только один оператор not. Поведение при коротком замыкании также эквивалентно.

Редактировать 1 : внутренний генэксп фактически (безобиден, но) избыточен: not any(l) быстрее и лаконичнее.

Редактировать 2 : в комментарии утверждается, что all(not d for d in l) "больше, чем вы хотите выразить", чем not any(l), и я категорически не согласен: даже на естественном языке "все элементы списка не населенный "не более нормальный, прямой или ясный, чем" ни один элемент списка не заполнен "- помимо абсолютной логической эквивалентности по законам логики, два способа выражения очень близки и примерно эквивалентны с точки зрения человека психология тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...