Python - 将列表与错误

时间:2015-06-11 22:28:41

标签: python list function python-3.x

def somalist (lista):
    listasoma = [0,0,0,0,0,0,0,0,0,0,0]
    for i in lista:
        for g in i:
            if i.index(g) != 0 and i.index(g) != 1 and i.index(g) != 2 and i.index(g) != 3:
                listasoma[i.index(g)] += g
            else:
                listasoma[i.index(g)] = g
            print(listasoma)
    return(listasoma)

x = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]] print(somalist(x))

是函数,它可以处理每个子列表的总和,但它保留索引[0],[1],[2]和[3]并将其他值相加。在这个例子中,我将使用列表x,在此列表中该函数可以正常工作。该计划的退出是:

[1, 2, 3, 4, 32, 18, 21, 24, 27, 30, 22]

是我所说的它保留成员[0],[1],[2],[3]并将每个子列表的其他索引相加。

但是当我们不止一次使用某个数字时,它会失败。

使用:X = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,**6**,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]]

  

第二个子列表中的6(索引4)被写入两次(另一个在同一子列表的索引5处)

退出是:[1, 2, 3, 4, **22**, 12, 21, 24, 27, 30, 33]

这是错的!

正确退出应为:[ 1, 2, 3, 4, 16, 18, 21, 24, 27, 30, 33]

有人可以告诉我我的代码在哪里错了吗?

1 个答案:

答案 0 :(得分:1)

我建议完全放弃index()方法。

def somalist (lista):
    return lista[0][:4] + [sum(item) for item in list(zip(*lista))[4:]]

这适用于带有重复元素的list

                                            v
>>> x = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]]
>>> X = [[1,2,3,4,5,6,7,8,9,10,11],[1,2,3,4,6,6,7,8,9,10,11],[1,2,3,4,5,6,7,8,9,10,11]]
>>> print(somalist(x))
[1, 2, 3, 4, 15, 18, 21, 24, 27, 30, 33]
>>> print(somalist(X))
[1, 2, 3, 4, 16, 18, 21, 24, 27, 30, 33]
             ^^