2

我有一个字典,我将其转换为字节数组,并且由于字节数组是不可变的(无法修改),我尝试创建一个等于字节数组中每个索引的列表。

a = {1:'a', 2:'b', 3:'c'}
b = bytearray(str(a), 'ASCII')
c = []

for i in b:
    c[i] = b[i]     # Error on this line

print(str(c))

问题是它一直在打印IndexError: bytearray index out of range
bytearray 如何以及为什么超出范围?

4

3 回答 3

5

如果我正确理解了您的问题,您可以简单地使用c = list(b)

a = {1:'a', 2:'b', 3:'c'}
b = bytearray(str(a), 'ASCII')
c = list(b)

print(c)

输出:

[123, 49, 58, 32, 39, 97, 39, 44, 
 32, 50, 58, 32, 39, 98, 39, 44, 
 32, 51, 58, 32, 39, 99, 39, 125]

为了了解您收到此错误的原因,请参阅此答案

于 2013-05-30T18:46:22.087 回答
4

i不是索引中的b

b = [1,5,20]
for i in b:
   print i #prints 1,then 5 , then 20
于 2013-05-30T18:46:49.160 回答
1

要修复您的代码:

a = {1:'a', 2:'b', 3:'c'}
b = bytearray(str(a), 'ASCII')
c = []

for i in b:
    c.append(i) 

或者,更好的是,您可以直接将字节数组与list构造函数一起使用并放弃循环:

c=list(b)

或者,跳过字节数组并使用列表推导:

c= [ord(ch) for ch in str(a)]

在所有这些情况下,如果这是您的目标,您将获得 ASCII 序数列表:

[123, 49, 58, 32, 39, 97, 39, 44, 32, 50, 58, 32, 39, 98, 39, 44, 32, 51, 58, 32, 39, 99, 39, 125]
于 2013-05-30T18:46:28.793 回答