Mik*_*ike 2 python if-statement list-comprehension
我在python中创建了以下列表解析:
[int(a[0].internal_value).lower() if type(a[0].internal_value) in (str,unicode) and a[0].internal_value.isdigit() == True
else str(a[0].internal_value).lower() if type(a[0].internal_value) in (str,unicode)
else int(a[0].internal_value) if type(a[0].internal_value) in (float,int)
for a in ws.iter_rows() if a[0].internal_value <> None]
Run Code Online (Sandbox Code Playgroud)
我有问题试图构建最终的else,如果条件:
else int(a[0].internal_value) if type(a[0].internal_value) in (float,int)
Run Code Online (Sandbox Code Playgroud)
如果我在该行中使用if条件,则会得到无效的语法.
if type(a[0].internal_value) in (float,int)
Run Code Online (Sandbox Code Playgroud)
如果我删除if语句
else int(a[0].internal_value)
Run Code Online (Sandbox Code Playgroud)
然后似乎运行正常.我需要在那里有if语句.
给我其他的,如果条件是列表理解方式做更简单的if,else条件:
if i == x:
do something
elif i == y:
do something
elif i == z:
do something
Run Code Online (Sandbox Code Playgroud)
按照规则,你并不总是需要一个'else'来关闭一系列条件句.在我看来,我的代码想要理解中的最终"其他".我是否正确陈述,如果是这样,有没有办法构建最终的其他,如果在python列表理解而不是最终的其他?
Mar*_*ers 10
你是(ab)使用条件表达式,它们必须是形式true_expression if test else false_expression.与复合语句不同,这些表达式始终生成一个值if.
请注意,您应该不测试== True; 没有该测试,布尔表达式已经为true或false.不要使用<>任何一个,该运算符已被弃用并且已完全从Python 3中删除.在测试None单身时,你会使用它is not None.
你正在测试type()结果; 看起来你想要使用isinstance()测试.
您还在使用int()值,然后调用.lower()结果.没有int.lower()方法,因此这些调用将失败AttributeError.
以下是更接近于工作得很好,除非有更多类型比int,float,str或unicode:
[int(a[0].internal_value) if isinstance(a[0].internal_value, (float, int)) or a[0].internal_value.isdigit()
else str(a[0].internal_value).lower()
for a in ws.iter_rows() if a[0].internal_value is not None]
Run Code Online (Sandbox Code Playgroud)
但是,我会将转换过滤到功能:
def conversion(value):
if isinstance(value, (float, int)):
return int(value)
return str(value).lower()
Run Code Online (Sandbox Code Playgroud)
然后在列表理解中使用它:
[conversion(a[0].internal_value) for a in ws.iter_rows() if a[0].internal_value is not None]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5570 次 |
| 最近记录: |