写入多个位置的嵌套列表写入?

时间:2016-12-19 01:02:11

标签: python python-2.7 list enumerate

嗨,我对以下代码有这个非常奇怪的问题:

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,k1
  • 1,k1
  • 2,k1
  • 3,k1

我的实际目标是使用我注释掉的两行来转置此嵌入列表。

任何和所有帮助表示赞赏。

1 个答案:

答案 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)]