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

hex_list元素重赋值未生效引发无限循环,求技术解析

十六进制字符串处理时的无限循环问题

以下是测试十六进制与二进制转换函数的代码片段(函数均接收并返回字符串):

import random  # 原代码缺少该导入,补充以保证可运行

hex_list = []
for i in range(50):
    hex_list.append("0X" + "".join([random.choice("0123456789ABCDEF") for j in range(10)]))
for index, hex in enumerate(hex_list):
    iterations = 0
    while hex_list[index][2] == "0":
        print(f"ENTERING LOOP FOR ZERO AT THE LEFT IN {hex}")
        print("BEFORE ", hex_list[index])
        hex_list[index] = hex[:2] + hex[3:]
        print("AFTER ", hex_list[index])
        iterations += 1
        if iterations > 5:
            print("\n5 ATTEMPTS REACHED FOR {hex}\n")
            break

问题原因

核心bug是循环中误用了原始字符串副本,而非列表的当前元素:

  • 在for index, hex in enumerate(hex_list):循环里,hex是列表元素的初始副本,后续修改hex_list[index]不会同步更新这个hex变量。
  • 执行hex_list[index] = hex[:2] + hex[3:]时,始终用的是循环开始时的原始hex字符串来拼接,根本没用到列表里已经修改过的最新值。
  • 举个例子:如果初始hex是0X00ABCDEF12,第一次修改后hex_list[index]变成0X0ABCDEF12,但下一次循环你还是用原始hex生成同样的结果,等于没改,自然陷入无限循环。

修复方法

修改时基于hex_list[index]的当前值操作,替换掉代码中的赋值行:

hex_list[index] = hex_list[index][:2] + hex_list[index][3:]

这样每次循环都会基于列表里的最新字符串去掉开头的0,直到第3位不是0为止,不会再出现死循环。

内容的提问来源于stack exchange,提问作者user21767142

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:52:41