编写python代码,仅打印给定列表中评估为True的表达式[关闭]
Posted
技术标签:
【中文标题】编写python代码,仅打印给定列表中评估为True的表达式[关闭]【英文标题】:Write python code that prints only the expressions that evaluate to True in the given list [closed] 【发布时间】:2022-01-13 02:05:46 【问题描述】:Q1考虑给定的列表。编写仅打印给定列表中计算结果为 True 的表达式的 Python 代码。 您可以根据需要使用 for 循环和 if 语句。 for 循环可以遍历列表的所有元素,如下所示:
for item in myList:
if item == True:
myList = [6<5, 1==3, True or False, 1]
for element in myList:
if (element == True):
print(element)
【问题讨论】:
欢迎来到 Stack Overflow!这不是一个人们为您编写代码以便您不必编写代码的网站。如果您需要帮助调试您编写的代码,您必须发布Minimal, Complete, and Verifiable example 并解释您的代码的具体问题。print([item for item in myList if item])
如果element
是整数,if element == True: print(element)
将永远不会打印任何内容,因为它永远不会等于True
【参考方案1】:
你可以这样做
有点奇怪,python 会评估你所有的表达式,所以一旦你声明了变量,它们就会保持为 True/False。
我认为您希望将表达式声明为列表中的字符串,然后使用 eval 将字符串评估为 python:
myList = ["6<5", "1==3", "True or False", "1"]
for item in myList:
if eval(item):
print(item)
打印以下内容:
True or False
1
【讨论】:
我正在尝试提取列表中那些给出布尔 True 值的元素。在我的列表中,我输入了一些给出真或假的表达式。现在我正在尝试打印那些只给出真值的表达式。 你试过我的代码了吗?该代码将打印列表中所有计算结果为 True 的元素 @buran eval() 是python将字符串作为代码运行的一种方式(非常模糊),否则所有表达式都会为真,因为非空字符串的布尔值为真,您可以尝试运行bool("6 这里为什么需要eval()
?样本列表中的 OP 元素不是 str。我知道eval()
做了什么,也知道它可能很危险:-)
如果你发现 OP 问题有问题 - 向他们询问它和预期的输出,不要即兴创作样本输入。他们的样本数据很可能是个问题。但你不确定。【参考方案2】:
以下内容永远不会打印任何内容:
i = 1
if i == True:
print(i)
因为i
是一个整数,所以它永远不会等于True
。
但会打印以下内容:
i = 1
if i:
print(i)
为什么?因为if i:
中的i
是在布尔上下文中。
if
需要一个真/假值。如果它没有得到一个,它有将其他类型(例如整数)转换为True
或False
的规则。
if i:
与 if i == True:
不同...
相反,它会检查 i
是否非零。
为什么?
在 if 语句等布尔上下文中,非零整数被视为 True
。 0
被认为是 False
。
还有各种其他规则,但您最有可能遇到的一条是:
任何非空字符串都是True
。示例:"Fred"
一个空字符串(""
)是False
例子:
name = ""
if name:
print("Hello " + name)
else:
print("No name given. Welcome!")
这将打印"No name given. Welcome!"
。原因如下:
-
名称为空字符串
if name:
需要一个 True/False 值,但会找到一个字符串
它遵循布尔上下文的字符串规则:如果字符串为空,则为False
,否则为True
所以else:
被执行了
为了更正你的代码,你应该写的是:
myList = [6<5, 1==3, True or False, 1]
for element in myList:
# NOT if element == True:
if element:
print(element)
This article 更详细地介绍了布尔上下文。
【讨论】:
以上是关于编写python代码,仅打印给定列表中评估为True的表达式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章