如何以pythonic方式做到这一点?

时间:2010-04-14 10:40:37

标签: python syntax

考虑这个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 个答案:

答案 0 :(得分:17)

使用in运算符:

if a in (7,8,9):
    pass

答案 1 :(得分:15)

测试 a 是否属于某个范围:

if 7 <= a <= 9:
  pass

测试 a 是否在给定的序列中:

if a in [3, 5, 42]:
  pass

答案 2 :(得分:2)

for a in range(10):
    if a > 6:
        continue
    print('yes')

答案 3 :(得分:2)

根据您的原始代码,直接“pythonic”替换是:

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

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

后者读得好一点,所以我猜它有点“pythonic”。

答案 4 :(得分:1)

if a in [7,8,9]

答案 5 :(得分:1)

根据您的想法,map()功能也很有趣:

def _print(x):
    print 'yes'

map(_print, [a for a in range(10) if a not in (7,8,9)])

答案 6 :(得分:1)

如何使用lambda。

>>> f = lambda x: x not in (7, 8, 9) and print('yes')
>>> f(3)
yes
>>> f(7)
False

答案 7 :(得分:1)

由于问题被标记为初学者,我将添加 一些基本的if语句建议:

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

是三个独立的if语句,前两个没有效果,else仅指

 if a == 9:

所以如果a是7或8,则程序打印“是”。为了将来使用这样的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"