为何sum后加‘1’可避免语法错误?汉明距离函数问题解析
汉明距离函数的语法疑问解析
可正常运行的代码
def hamming_distance(dna_1,dna_2): hamming_distance = sum(1 for a, b in zip(dna_1, dna_2) if a != b) return hamming_distance
触发语法错误的代码
def hamming_distance(dna_1,dna_2): hamming_distance = sum(for a, b in zip(dna_1, dna_2) if a != b) return hamming_distance
错误原因解析
- 生成器表达式的语法规则:Python的生成器表达式必须遵循「
表达式 for 元素 in 可迭代对象 if 条件」的结构。当它作为函数的唯一参数时,可以省略外层括号,但开头的生成表达式是必填项——你得明确指定每次迭代要产出什么值。 - sum函数的工作逻辑:
sum()需要接收一个可迭代对象,对其中所有元素求和。正确代码里,1 for a, b in zip(...) if a != b是一个生成器,每次遇到碱基对不相等的情况就产出一个1,sum把这些1累加后,正好得到汉明距离的数值。 - 错误代码的核心问题:去掉
1之后,for a, b in zip(...) if a != b不是合法的可迭代对象,Python解释器无法识别这种语法结构,直接抛出SyntaxError。
内容的提问来源于stack exchange,提问作者Ricky Everest
相关产品推荐
相关产品推荐

