gpt4 book ai didi

python - 在列表解析中使用 if, elif, else, Python

转载 作者:行者123 更新时间:2023-11-28 19:49:27 32 4
gpt4 key购买 nike

我在 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]

我在尝试构造最终的 else 时遇到问题,如果条件:

else int(a[0].internal_value) if type(a[0].internal_value) in (float,int)

如果我在该行中使用 if 条件语句,我会得到一个无效的语法。

 if type(a[0].internal_value) in (float,int)

如果我删除 if 语句

else int(a[0].internal_value)

然后它似乎运行良好。我需要在那里有那个 if 语句。

对我来说,else, if 条件是列表推导的方式来做更简单的 if, else 条件:

if i == x:
do something
elif i == y:
do something
elif i == z:
do something

根据规则,您不必总是用“else”来结束一系列条件句。在我看来,我的代码在理解中需要一个最终的“其他”。我的说法是否正确?如果是这样,如果在 python 列表理解中而不是最终的 else 中,是否有构建最终的 else 的方法?

最佳答案

您正在(滥用)使用 conditional expressions , 它们必须的形式是 true_expression if test else false_expression .这些表达式总是产生一个值,不像if复合语句。

注意你不应该测试== True ;未经该测试, bool 表达式已经是真或假。不要使用 <>或者,该运算符已被弃用并已从 Python 3 中完全删除。测试 None 时, 一个单例,你会使用 is not None然而。

您正在针对 type() 进行测试结果;看起来你想使用 isinstance() tests相反。

您还在使用 int()在值上,然后调用 .lower()在结果上。没有 int.lower()方法,因此这些调用将失败并显示 AttributeError .

以下更接近工作正常,除非类型多于 int , float , strunicode :

[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]

但是,我会将转换外包给过滤函数:

def conversion(value):
if isinstance(value, (float, int)):
return int(value)
return str(value).lower()

然后在列表理解中使用that:

[conversion(a[0].internal_value) for a in ws.iter_rows() if a[0].internal_value is not None]

关于python - 在列表解析中使用 if, elif, else, Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19459744/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com