首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在0中使用Python逻辑运算符的问题

在0中使用Python逻辑运算符的问题
EN

Stack Overflow用户
提问于 2012-01-06 16:40:20
回答 2查看 424关注 0票数 2

我从这个网站上的其他人那里学到了一些技巧,我一直在使用逻辑运算符来表达列表理解中的条件逻辑,以此作为在if语句中使用full for循环的捷径。

例如,如果我有一个列表1,0,0,1,1,我想把它变成"Yes","No","No","Yes","Yes“,我可以这样做:

代码语言:javascript
运行
复制
original = [1, 0, 0, 1, 1]
new = [((x==1) and "Yes") or "No" for x in original]

我的问题是,当我以这种方式使用带有0的逻辑运算符时,我得到了一些非常奇怪的结果。无论我是否使用列表理解,结果都会发生。

这些是:

代码语言:javascript
运行
复制
print((True and 1.0) or "Wrong")
print((True and -1.0) or "Wrong")
print((True and "1.0") or "Wrong")
print((True and 1) or "Wrong")

正确(我认为)输出:

代码语言:javascript
运行
复制
1.0
-1.0
1.0
1

然而,这些是:

代码语言:javascript
运行
复制
print((True and 0) or "Wrong")
print((True and 0.0) or "Wrong")

输出:

代码语言:javascript
运行
复制
Wrong
Wrong

我认为Python隐式地将0和0.0都转换为布尔值False,并将任何其他类型的任何其他值转换为True

有没有人能确认一下: a.是这样的和/或b.有没有其他方法来实现我在列表理解中想要的东西(使用lamda或其他方法)

非常感谢Chris

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-06 16:45:55

是的,0在短路评估中返回false (您可以通过返回falsebool(0)进行测试)。我认为这要简单得多:

代码语言:javascript
运行
复制
new = ["yes" if x else "no" for x in list]
票数 5
EN

Stack Overflow用户

发布于 2012-01-06 16:47:40

以下值被解释为false: False、None、所有类型的数字零以及空字符串和容器(包括字符串、元组、列表、字典、集合和frozensets)。所有其他值都被解释为true。(有关更改这一点的方法,请参阅非零()特殊方法。)

节选自http://docs.python.org/reference/expressions.html#boolean-operations

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8755299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档