2016-12-19 3 views
0

こんにちは、私は次のコードで、この非常に奇妙な問題持っている:私の直感はこれが唯一のblocklist_tにインデックス0を一覧表示するには書くでしょうということでしょう複数の場所でネストされたリストの書き込みに書き込む?

blocklist_t[0][k1] = i[0] 

具体的に並んで

def splice_into_blocks(s,bs): 
    blocklist = [] 
    if (len(s)%bs): 
     s = s+'0'*(bs-len(s)%bs) 
    for i in range((len(s)/bs)+1): 
     blocklist.append(list(s[bs*(i):bs*(i+1)])) 
    del blocklist[-1] 
    return blocklist 


bl = splice_into_blocks(crypt, 4) 
# print bl 

def byte_transpose(blocklist): 
    bs = len(blocklist[0]) 
    blocklist_t = [['0']*len(blocklist)]*bs 
    for k1,i in enumerate(blocklist): 
     # for k2,j in enumerate(i): 
     #  blocklist_t[k2][k1] = j 
     blocklist_t[0][k1] = i[0] 
    print blocklist_t 

byte_transpose(bl) 

を(だから私の場合は、4の最初のもの)、他のものだけを残す。私の実際の目的は、使用することです

  • 0、K1
  • 1、K1
  • 2、K1
  • 3、K1

:しかし、に同じ値を書いていますこの埋め込みリストを転記するために私がコメントした2行。

ありがとうございました。

答えて

1

演算子*はリスト[['0']*len(blocklist)]からbs参照、ないbsコピー[['0']*len(blocklist)]のリストを作ります。言い換えれば、あなたが必要なものなどblocklist_t[0]blocklist_t[1]、として一つだけ[['0']*len(blocklist)]参照があり、このです:

blocklist_t = [['0']*len(blocklist) for i in range(bs)] 
+0

はあなたに感謝、私は同様に重要なことを学びました – user2886057

関連する問題