Как это сделать по-питонски? - PullRequest
3 голосов
/ 14 апреля 2010

Рассмотрим этот фрагмент Python:

for a in range(10):

    if a == 7:
        pass
    if a == 8:
        pass
    if a == 9:
        pass
    else:
        print "yes"

Как это можно написать короче?

#Like this or...
if a ?????[7,8,9]:
    pass

Ответы [ 8 ]

17 голосов
/ 14 апреля 2010

Используйте оператор in:

if a in (7,8,9):
    pass
15 голосов
/ 14 апреля 2010

Чтобы проверить, попадает ли a в диапазон:

if 7 <= a <= 9:
  pass

Чтобы проверить, находится ли a в заданной последовательности:

if a in [3, 5, 42]:
  pass
2 голосов
/ 07 июля 2010

Исходя из вашего исходного кода, прямая «питонная» замена:

if not a in [7, 8, 9]:
     print 'yes'

или

if a not in [7, 8, 9]:
     print 'yes'

Последний выглядит немного лучше, так что, я думаю, он немного более "питонический"

2 голосов
/ 14 апреля 2010
for a in range(10):
    if a > 6:
        continue
    print('yes')
1 голос
/ 23 апреля 2010

Поскольку вопрос помечен как начинающий, я собираюсь добавить несколько простых советов по утверждению:

if a == 7:
    pass
if a == 8:
    pass
if a == 9:
   ...
else:
   ...

- это три независимых оператора if, и первые два не действуют, остальное относится только к

 if a == 9:

, поэтому, если a равно 7 или 8, программа выводит «yes». Для использования в будущем оператора if-else, такого как этот, обязательно используйте elif:

if a == 7:
    seven()
elif a == 8:
    eight()
elif a == 9:
    nine()
else:
    print "yes"

или используйте только один оператор if, если они вызывают одно и то же действие:

if a == 7 or a == 8 or a == 9:
    seven_eight_or_nine()
else:
    print "yes"
1 голос
/ 14 апреля 2010

Как насчет использования лямбды.

>>> f = lambda x: x not in (7, 8, 9) and print('yes')
>>> f(3)
yes
>>> f(7)
False
1 голос
/ 14 апреля 2010

В зависимости от того, что вы хотите сделать, функция map() может быть интересной:

def _print(x):
    print 'yes'

map(_print, [a for a in range(10) if a not in (7,8,9)])
1 голос
/ 14 апреля 2010
if a in [7,8,9]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...