尝试用生成器表达式理解Python代码

2024-06-27 17:23:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在以下代码中:

chars = set('AEIOU')
...
if any((cc in chars) for cc in name[ii]):
    print 'Found'

什么是“(cc in chars)”部分?我知道它应用于for循环生成的每个cc。但是“(cc in chars)”构造本身是生成器表达式吗?你知道吗

谢谢。你知道吗


Tags: 代码nameinforif表达式anyii
3条回答

否,(cc in chars)部分是一个布尔表达式;^{} is a sequence operator用于测试cc是否是序列chars的成员。括号实际上是多余的,可以省略。你知道吗

不,(cc in chars)只是一个布尔值,如果cc在chars中则返回True,否则返回False。你知道吗

实际上,代码实际上是可以编写的

chars = set('AEIOU')
...
if [cc for cc in name[ii] if cc in chars]:
    print 'Found'

在这种情况下,如果列表中有任何元素(使其通过if子句),那是因为某些cc在chars中。事实上,我会发现这更具可读性和直截了当。 干杯。你知道吗

编辑:

为了澄清我的答案,[cc for cc in name[ii] if cc in chars]生成了name[ii]中“chars”中的所有字符(在这种情况下是元音)的列表。如果此列表上有任何元素,它将通过If测试。你知道吗

[cc for cc in name[ii] if cc in chars]表示“对于name[ii]中的每个元素/字符,只有在chars中才添加它。查看this答案以获得澄清。你知道吗

(cc in chars)只是检查字符串cc是否包含在chars中,并返回布尔值falsetrue。你知道吗

根据Python Language Reference,括号之间的东西不是生成器表达式,除非它至少有一个for i in iterable子句。你知道吗

相关问题 更多 >