2

bytearray に変換する辞書があり、bytearray は不変 (変更できない) であるため、bytearray 内の各インデックスに等しいリストを作成しようとしています。

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 に答える