You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python转Kotlin:实现指定求和代码及理解enumerate函数

问题解决:Python汉明码错误计算转Kotlin + enumerate函数解析

一、Python enumerate函数解析

  • enumerate是Python内置遍历工具,作用是遍历可迭代对象(列表、元组等)时,同时返回索引值和对应元素
  • 索引默认从0开始,也可通过第二个参数指定起始值(比如enumerate(list, 1)会从1开始计数)
  • 你代码里的enumerate(parity_list[::-1])逻辑:
    1. parity_list[::-1]将原列表反转(比如原列表是[P1,P2,P3],反转后变为[P3,P2,P1])
    2. enumerate遍历反转后的列表,依次输出(0, P3)、(1, P2)、(2, P1)这类元组

二、原Python代码逻辑拆解

你代码里存在变量名重复问题(遍历元素和原列表重名,易混淆),修正后更清晰的写法是:

error = sum(int(bit) * (2 ** i) for i, bit in enumerate(parity_list[::-1]))

核心逻辑:

  1. 反转奇偶校验位列表
  2. 对每个反转后的校验位,计算校验位数值 × 2^索引i(索引i从0开始)
  3. 所有结果求和,得到的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:25:07