Python转Kotlin:实现指定求和代码及理解enumerate函数
问题解决:Python汉明码错误计算转Kotlin + enumerate函数解析
一、Python enumerate函数解析
- enumerate是Python内置遍历工具,作用是遍历可迭代对象(列表、元组等)时,同时返回索引值和对应元素
- 索引默认从0开始,也可通过第二个参数指定起始值(比如
enumerate(list, 1)会从1开始计数) - 你代码里的
enumerate(parity_list[::-1])逻辑:parity_list[::-1]将原列表反转(比如原列表是[P1,P2,P3],反转后变为[P3,P2,P1])- enumerate遍历反转后的列表,依次输出
(0, P3)、(1, P2)、(2, P1)这类元组
二、原Python代码逻辑拆解
你代码里存在变量名重复问题(遍历元素和原列表重名,易混淆),修正后更清晰的写法是:
error = sum(int(bit) * (2 ** i) for i, bit in enumerate(parity_list[::-1]))
核心逻辑:
- 反转奇偶校验位列表
- 对每个反转后的校验位,计算
校验位数值 × 2^索引i(索引i从0开始) - 所有结果求和,得到的error就是汉明码中错误位的位置(error=0表示无错误)
三、Kotlin等价实现
Kotlin用reversed()实现列表反转,用mapIndexed同时获取索引和元素,再用sum()求和。另外Kotlin中2^i可以用位运算1 shl i替代,效率更高:
场景1:parityList元素是字符串/字符(比如输入的'0'/'1')
val parityList: List<String> = listOf("1", "0", "1") // 示例校验位列表 val error = parityList.reversed() .mapIndexed { index, bit -> bit.toInt() * (1 shl index) } .sum()
场景2:parityList元素已是Int类型
val parityList: List<Int> = listOf(1, 0, 1) // 示例校验位列表 val error = parityList.reversed() .mapIndexed { index, bit -> bit * (1 shl index) } .sum()
四、结果验证示例
假设反转后的校验位列表是[1,0,1]:
- Python计算:
1×2⁰ + 0×2¹ +1×2² = 1+0+4=5 - Kotlin计算:
1*(1<<0) + 0*(1<<1) +1*(1<<2) =1+0+4=5,结果完全一致
内容的提问来源于stack exchange,提问作者PROSTO ilya
相关产品推荐
相关产品推荐

