【问题标题】:How do I copy the contents of a bytearray to a list (Python)?如何将字节数组的内容复制到列表(Python)?
【发布时间】:2013-05-26 11:16:17
【问题描述】:

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

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 如何以及为什么超出范围?

【问题讨论】:

  • 乔兰·比斯利的回答解释了为什么你会得到这个例外。但是如果你修复了这个问题(例如,使用for index, value in enumerate(b): c[index] = value),你只会在list 上得到一个IndexError。如果你有一个空列表,你不能只设置c[0],因为没有c[0]可以设置。你需要使用append(或者想出一些其他的解决方案,比如预先分配列表c = [None for _ in b]——但如果你知道怎么做,你就会知道整个问题都是不必要的)。

标签: python dictionary python-3.x bytearray


【解决方案1】:

如果我正确理解了您的问题,您可以简单地使用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]

要了解您收到此错误的原因,请参阅此answer

【讨论】:

  • 这是 OP 试图做的事情的答案; Joran Beasley 是对 OP 的做法有什么问题的答案。对两者都 +1。
  • 非常感谢您快速而有帮助的回复。我不知道列表功能。将在几分钟后标记为答案。
  • @Joseph Webber:很高兴能帮到你:)
【解决方案2】:

ib 中的 不是索引

b = [1,5,20]
for i in b:
   print i #prints 1,then 5 , then 20

【讨论】:

    【解决方案3】:

    修复您的代码:

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 2011-12-07
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多