1

在以下代码中:

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

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

谢谢。

4

3 回答 3

3

(cc in chars)只需检查字符串cc是否包含在chars并返回布尔值falsetrue

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

于 2012-07-26T17:18:17.290 回答
3

不,这(cc in chars)部分是布尔表达式;in是一个序列运算符,用于测试是否cc是序列的成员chars。括号实际上是多余的,可以省略。

于 2012-07-26T17:17:29.507 回答
1

不,这(cc in chars)只是一个布尔值,如果 cc 在字符中则返回 True ,否则返回 False 。

事实上,代码实际上可以写成

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

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

编辑:

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

[cc for cc in name[ii] if cc in chars]说“对于名称 [ii] 中的每个元素/字符,仅当它在字符中时才添加它。查看答案以进行澄清。

于 2012-07-26T17:22:17.960 回答