2012-04-22 61 views
14

我想知道,是否可以将多个if条件放入列表理解中?我在文档中没有找到类似的内容。python列表理解中的多个IF条件

我希望能够做这样的事

ar=[] 
for i in range(1,n): 
    if i%4 == 0: ar.append('four') 
    elif i%6 == 0: ar.append('six') 
    else: ar.append(i) 
使用列表理解

。我该怎么做?

这甚至可能吗?如果不是,那么完成这件事最优雅(pythonic)的方式是什么?

+1

只是因为你可以... – dkamins 2012-04-23 00:20:27

回答

16

如何

ar = [('four' if i % 4 == 0 else ('six' if i % 6 == 0 else i)) for i in range(1, n)] 

例如,如果n = 30这是

[1, 2, 3, 'four', 5, 'six', 7, 'four', 9, 10, 11, 'four', 13, 14, 15, 'four', 17, 'six', 19, 'four', 21, 22, 23, 'four', 25, 26, 27, 'four', 29] 

埃塔:这里是你如何可以申请条件的列表:

CONDITIONS = [(lambda i: i % 4 == 0, "four"), (lambda i: i % 6 == 0, "six"), 
       (lambda i: i % 7 == 0, "seven")] 

def apply_conditions(i): 
    for condition, replacement in CONDITIONS: 
     if condition(i): 
      return replacement 
    return i 

ar = map(apply_conditions, range(0, n)) 
+2

谢谢!我相信这样我可以给它添加任意数量的条件。虽然代码将是不可理解的! – Rushil 2012-04-22 23:05:22

+0

看我的编辑。我相信你可以找出其余的(但如果没有,我可以帮助) – 2012-04-22 23:26:37

+0

(我的原始被忽视,使他们lambda声明,当前版本将工作,虽然) – 2012-04-22 23:28:21

5

你可以把你在一个单独的功能逻辑,然后有机智的清单理解的优雅h功能的可读性:

def cond(i): 
    if i % 4 == 0: return 'four' 
    elif i % 6 == 0: return 'six' 

    return i 

l=[cond(i) for i in range(1,n)]