检查Python列表理解表达式中是否为true的更短方法?

时间:2013-05-28 09:59:28

标签: python

可以写得更短吗?我最感兴趣的是没有写 r[0].value 两次。替代必须更短

(r[0].value for r in sheet.range(USERROLELIST) if r[0].value)

if r[0].value - 检查它!=无

sheet.range来自openpyxl模块。

3 个答案:

答案 0 :(得分:2)

这样做:

(r for r in (R[0].value for R in sheet.range(USERROLELIST)) if r)

如果你真的想用“尽可能少的角色”来制作东西

您可以尝试这样的事情:

首先,使用较短的名称导入模块......

from openpyxl import sheet
sr = sheet.range

其次,有更短的变量名称:

L = USERROLELIST

最后,取消额外的空白:

(r for r in(R[0].value for R in sr(L))if r)

答案 1 :(得分:1)

这是编写它的另一种方式,但我更喜欢你给出的代码

filter(None, (r[0].value for r in sheet.range(USERROLELIST)))

答案 2 :(得分:1)

import itertools
gen = itertools.ifilter(lambda x: x[0].value, sheet.range(USERROLELIST))

#later...
for i in gen:
    # do something with i

此方法可减少临时拷贝开销