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]
有人可以告诉我我的代码在哪里错了吗?
答案 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]
^^