了解python对列表和列表索引的行为

时间:2015-03-14 12:32:37

标签: python

我有以下代码:

names = ['a', 'e', 'c', 'd', 'b']

stuff = [['a', 1], ['a', 2], ['b', 5], ['c', 4], ['c', 2], ['d', 10], ['e', 22], ['e', 13]]

x = [[0] * len(stuff)] * len(names)

counters = [0]*len(names)

for s in stuff:
    i = names.index(s[0])
    x[i][counters[i]] = s
    counters[i] += 1

for i in range(len(names)):
    if 0 in x[i]:
        x[i] = x[i][:x[i].index(0)]

print x

我想要的是以下输出:

[[['a', 1], ['a', 2]], [['e', 22], ['e', 13]], [['c', 4], ['c', 2]], [['d', 10]], [['b', 5]]]

基本上,我想创建一个包含子列表子列表的新列表,其中最低级别的子列表的第0个条目始终相同(对不起,我不知道如何以更好的方式使用它)。我想从' stuff'中的子列表创建这个新列表。使用' name'的元素。运行我的代码时得到的是:

[[['e', 22], ['e', 13]], [['e', 22], ['e', 13]], [['e', 22], ['e', 13]], [['e', 22], ['e', 13]], [['e', 22], ['e', 13]]]

我的问题是:为什么我的代码会生成此输出而不是我想要的?我很确定行中出现问题

x[i][counters[i]] = s

但是,我不知道为什么这样的任何帮助真的值得赞赏...

0 个答案:

没有答案