【问题标题】:Writing to nested list writing in multiple spots?在多个位置写入嵌套列表?
【发布时间】:2016-12-19 01:02:10
【问题描述】:

您好,我对以下代码有一个非常奇怪的问题:

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

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

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

【问题讨论】:

    标签: python python-2.7 list enumerate


    【解决方案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)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2020-03-04
      • 2016-12-08
      相关资源
      最近更新 更多