Проверьте, все ли значения в итерируемой форме на питоне

В настоящее время я делаю это:

if x in a and y in a and z in a and q in a and r in a and s in a: print b 

Есть ли более питонический способ выражения этого утверждения if ?

4 Solutions collect form web for “Проверьте, все ли значения в итерируемой форме на питоне”

Использование всей функции позволяет написать это красивым и компактным способом:

 if all(i in a for i in (x, y, z, q, r, s)): print b 

Этот код должен делать почти то же, что и ваш пример, даже если объекты не хешируются или если у объекта есть какой-то смешной метод __contains__ . all функции также имеют аналогичное поведение короткого замыкания как цепочку and в исходной задаче. Сбор всех объектов, подлежащих тестированию в кортеже (или списке), гарантирует тот же порядок выполнения тестов, что и исходная проблема. Если вы используете набор, порядок может быть случайным.

Другой способ сделать это – использовать подмножества:

 if {x, y, z, q, r, s}.issubset(a): print(b) 

Пример REPL:

 >>> {0, 1, 2}.issubset([0, 1, 2, 3]) True >>> {0, 1, 2}.issubset([1, 2, 3]) False 

Одно из предостережений при таком подходе состоит в том, что все x , y , z и т. Д. Должны быть хешируемыми.

 if all(v in a for v in {x, y, z, q, r, s}): print(b) 

Преобразование в набор:

 if len({x, y, z, q, r, s} - set(a)) == 0: print b 

или

 t = {x, y, z, q, r, s} if t & set(a) == t: print b 
  • игра в блэкджек python, похоже, игнорирует оператор «if»
  • for - else vs для elif
  • если еще в понимании списка
  • Как избежать записи request.GET.get () дважды, чтобы распечатать его?
  • Инструкция Python для короткого слова "if-else"
  • Pythonic способ использовать второе условие в списках
  • swift if или / и выражение, подобное python
  • Python условный один или другой, но не оба
  • Python - лучший язык программирования в мире.