Python嵌套列表推导式解析:双for循环作用及求和逻辑疑问
代码逻辑拆解与解释
这段代码本质是嵌套列表推导式+求和操作,用来计算输入文本中所有字符的总分,计分规则由pointsInRu字典定义。下面逐部分拆解:
先明确变量含义
inputText:待计算的输入文本(比如俄语字符串)pointsInRu:一个映射字典,结构为{分数值: 对应字符集合},比如{1: 'аеёиоуыэюя', 2: 'бвгджз'},意思是集合里的字符都对应这个分数
逐段解析代码
原代码:
sum([sumOfLetter for i in inputText for sumOfLetter, weigthOfCh in pointsInRu.items() if i in weigthOfCh])
第一层循环:
for i in inputText
遍历输入文本里的每一个字符i,比如输入是"абв",就依次取出'а'、'б'、'в'。第二层循环:
for sumOfLetter, weigthOfCh in pointsInRu.items()
遍历pointsInRu字典的每一组键值对:sumOfLetter是当前遍历到的分数值(字典的键)weigthOfCh是该分数对应的字符集合(字典的值)
这层循环的核心作用是:给当前字符i匹配对应分数——因为字典是按分数分组存字符的,不是直接用字符做键映射分数,所以必须挨个检查每个分数组里是否包含当前字符。
条件判断:
if i in weigthOfCh
检查当前字符i是否在这个分数对应的字符集合里,匹配成功就把sumOfLetter(该字符的对应分数)加入列表。外层
sum()
把列表中所有字符的分数相加,最终得到输入文本的总得分。
举个直观例子
假设pointsInRu = {1: 'а', 2: 'бв'},inputText = 'абв':
- 遍历
'а'时,匹配到分数1,列表加入1 - 遍历
'б'时,匹配到分数2,列表加入2 - 遍历
'в'时,匹配到分数2,列表加入2 - 最后
sum([1,2,2])得到总分5
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

