微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果不是,则为Python中的None

如何解决如果不是,则为Python中的None

| 有什么方法可以用Python编写一行,甚至更好,以表达式而不是语句的形式编写?
parts = [\'0\',\'1\',\'None\',\'5\',\'4\']
[int(p) for p in parts]
这当然会产生错误
ValueError: invalid literal for int() with base 10: \'None\'
所以:
[p==\'None\' and None or int(p) for p in parts]
无效,因为您无法可靠地将and和/或构造使用
None
。 (即使
p==\'None\'
为true,ѭ3to也等于false,因此将其移至
or
部分。)
[int(p) if p==\'None\' else None for p in parts]
也行不通。我猜它在条件之前的价值是
int(p)
? (似乎是奇怪的语义。)
a = []
for p in parts:
    if p==\'None\': k = None; else: k = int(p)
    a.append(k)
不,语法无效。
a = []
for p in parts:
    if p==\'None\':
        k = None;
    else:
        k = int(p)
    a.append(k)
啊!最后。但是,难道没有较短的方法可以编写这样一个简单的循环吗?     

解决方法

您几乎完全正确:
[None if p == \'None\' else int(p) for p in parts]
    ,差不多了:
[int(p) if p != \'None\' else None for p in parts]
    ,
[ [int,eval] [p==\'None\'] (p) for p in parts]
应保存为eval,仅在字符串\'None \'上调用。     ,您的代码中确实只有一个地方需要进行此转换吗?如果没有,请定义一个函数,然后使其成为多行,带有注释的且易于遵循。这样,您可以隐藏代码的复杂性,并使主代码易于阅读。     ,一个更简单的解决方案是:
parts = [\'0\',\'1\',\'None\',\'5\',\'4\']
[int(p) for p in parts if p.isdigit()]
但是,此处不接受float。如果必须将float字符串(??我不知道该怎么称呼)整数,则可以考虑以下内容:
parts = [\'0\',\'4\']
[int(p.split(\".\")[0]) for p in parts if p.replace(\".\",\"\",1).isdigit()]
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。