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

为什么Python中遍历bytes对象存入列表时元素会转换为int类型

问题解答

核心原因

这是Python bytes 类型的原生设计逻辑:bytes 本质是由 0~255 范围内整数构成的不可变序列,直接遍历 bytes 对象时,返回的每个元素就是对应字节的十进制整数值,而非长度为1的bytes对象。
你打印完整bytes变量时看到的\x1d、B这类表现形式,只是Python为了提升可读性做的格式化输出,并非bytes的内部存储形式。

适配方案

如果你需要转置后的列表元素保持单字节bytes类型,可通过两种方式修改transpose函数:

方案1:整数转单字节bytes

遍历得到整数后,用bytes([c])转换为单字节bytes再存入列表:

def transpose(data, n):
    buckets = [[] for _ in range(n)]
    i = 0
    for c in data:
        # 仅修改这一行,整数转单字节bytes
        buckets[i].append(bytes([c]))
        i = (i + 1) % n
    return buckets

方案2:切片取值

通过索引切片读取bytes,切片操作返回的结果始终是bytes类型:

def transpose(data, n):
    buckets = [[] for _ in range(n)]
    for idx in range(len(data)):
        buckets[idx % n].append(data[idx:idx+1])
    return buckets

额外说明

如果你后续要做单字节异或破解这类密码分析操作,直接用整数计算反而更便捷,不需要额外转回bytes类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:12:03