在以下代码中:
chars = set('AEIOU')
...
if any((cc in chars) for cc in name[ii]):
print 'Found'
什么是“(字符中的cc)”部分?我知道它适用于for循环生成的每个cc。但是“(cc in chars)”构建自己是一个生成器表达式吗?
感谢。
答案 0 :(得分:3)
不,(cc in chars)
部分是布尔表达式; in
is a sequence operator,用于测试cc
是否为序列chars
的成员。括号实际上是多余的,可以省略。
答案 1 :(得分:3)
(cc in chars)
只检查字符cc
是否包含在chars
中,并返回布尔值false
或true
。
根据Python Language Reference,括号之间的内容不是生成器表达式,除非它至少有一个for i in iterable
子句。
答案 2 :(得分: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是chars。我实际上发现它更具可读性和直接性。 欢呼声。
修改强>
为了澄清我的回答,[cc for cc in name[ii] if cc in chars]
生成名称[ii]中所有字符的列表,即“字符”(在这种情况下为元音)。如果此列表中包含任何元素,它将通过if-test。
[cc for cc in name[ii] if cc in chars]
说“对于名称[ii]中的每个元素/字符,只有在字符中添加它。请查看this答案以获得澄清。