在以下代码中:
chars = set('AEIOU')
...
if any((cc in chars) for cc in name[ii]):
print 'Found'
什么是“(cc in chars)”部分?我知道它适用于 for 循环生成的每个 cc 。但是“(cc in chars)”本身是一个生成器表达式吗?
谢谢。
(cc in chars)
只需检查字符串cc
是否包含在chars
并返回布尔值false
或true
。
根据Python Language Reference,括号之间的东西不是生成器表达式,除非它至少有一个for i in iterable
子句。
不,这(cc in chars)
部分是布尔表达式;in
是一个序列运算符,用于测试是否cc
是序列的成员chars
。括号实际上是多余的,可以省略。
不,这(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] 中的每个元素/字符,仅当它在字符中时才添加它。查看此答案以进行澄清。