嗨,我对以下代码有这个非常奇怪的问题:
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)
具体在行
blocklist_t[0][k1] = i[0]
我的直觉是,这只会写入blocklist_t中索引为0的列表(因此在我的情况下,是4中的第一个)并且将其他的单独留下。但是,它将相同的值写入:
我的实际目标是使用我注释掉的两行来转置此嵌入列表。
任何和所有帮助表示赞赏。
答案 0 :(得分:1)
运营商*
将bs
引用的列表列入[['0']*len(blocklist)]
列表,而非bs
副本 [['0']*len(blocklist)]
。换句话说,只有一个[['0']*len(blocklist)]
引用为blocklist_t[0]
,blocklist_t[1]
等。您需要的是:
blocklist_t = [['0']*len(blocklist) for i in range(bs)]