if any([x % 2 for x in result]): 
 print("good")

if any(x % 2 for x in result):
 print("good")

我正在学习Python,但不确定上面显示的两个表达式之间有什么不同.

第一个表达式是否判断列表中的每个元素?

I try to code myself, to solve this problem, but I don't get it why those two expressions are different 和 what they do.

推荐答案

为了了解发生了什么,让我们运行以下程序:

def test(i):
    print(i)
    if i == 5:
        return True
    return False

if any([test(i) for i in range(10)]):
    print("Done")

if any(test(i) for i in range(10)):
    print("Done")
0
1
2
3
4
5
6
7
8
9
Done
0
1
2
3
4
5
Done

第一个版本使用列表理解创建一个列表,在创建整个列表后,然后判断它是否有True/False值.您可以看到整个列表正在创建,因为所有最多10的数字都被打印出来.

但是,在第二个版本中,你会看到输出值最多只有5.这是因为第二个是generator expression,而any函数则逐个计算.例如,一旦i == 5any函数返回true并停止迭代生成器.

让我们以与第二个if-语句中相同的方式复制any函数.

def any(gen):
    for i in gen:
        if i:
            return True
    return False

这与builtin any函数的工作原理非常相似.它会查看每个元素,判断它是否为True,如果发现一个True的值,在循环结束之前返回.生成器表达式更高效的原因是因为值是一个接一个地创建的,而不是一次所有的列表理解.

Python相关问答推荐

如何在BeautifulSoup中链接Find()方法并处理无?

将两只Pandas rame乘以指数

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

运行终端命令时出现问题:pip start anonymous"

如何在Python中并行化以下搜索?

无法使用requests或Selenium抓取一个href链接

递归访问嵌套字典中的元素值

转换为浮点,pandas字符串列,混合千和十进制分隔符

在单个对象中解析多个Python数据帧

如何从需要点击/切换的网页中提取表格?

在matplotlib中删除子图之间的间隙_mosaic

为什么if2/if3会提供两种不同的输出?

Odoo16:模板中使用的docs变量在哪里定义?

如何在PythonPandas 中对同一个浮动列进行逐行划分?

如何根据一定条件生成段id

正则表达式反向查找

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)

牛郎星直方图中分类列的设置顺序

根据两个lambda条件筛选组并根据条件创建新列的最佳方式是什么?