2016-12-19 2 views
0

Hallo Ich habe dieses sehr seltsames Problem mit dem folgenden Code:Schreiben in verschachtelte Listen an mehreren Stellen schreiben?

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) 

Insbesondere in der Linie

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

Meine Intuition würde, dass dies nur schreiben mit dem Index 0 in der blocklist_t zur Liste (so in meinem Fall, der erste von 4) und lassen Sie die anderen in Ruhe. Es ist jedoch die gleichen Werte zu schreiben:

  • 0, k1
  • 1, k1
  • 2, k1
  • 3, k1

Mein eigentliches Ziel ist die verwenden zwei Zeilen, die ich auskommentiert habe, um diese eingebettete Liste zu transponieren.

Alle und alle helfen geschätzt.

Antwort

1

Operator * macht eine Liste von bsReferenzen zur Liste [['0']*len(blocklist)], nicht bsKopien von [['0']*len(blocklist)]. Mit anderen Worten, ist es nur eine [['0']*len(blocklist)] Referenzen als blocklist_t[0], blocklist_t[1] usw. Was müssen Sie dies:

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

danke, habe ich gelernt, etwas Wichtiges und – user2886057