编写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 需要一个真/假值。如果它没有得到一个,它有将其他类型(例如整数)转换为TrueFalse 的规则。

if i:if i == True: 不同...

相反,它会检查 i 是否非零。

为什么?

在 if 语句等布尔上下文中,非零整数被视为 True0 被认为是 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的表达式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

给定 SML 中的变量列表,生成所有真值赋值的列表?

Python for 循环仅将最后一个列表作为值附加

给定相对路径时,如何让 MSBUILD 评估和打印完整路径?

无限列表中的懒惰评估

返回列表结果为无

在 Python 中处理时,如何确保在短路点之后不会急切地评估任意函数调用列表?