【问题标题】:Python - Function that sums list's with errorPython - 将列表与错误相加的函数
【发布时间】:2015-06-11 22:28:40
【问题描述】:
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]

谁能告诉我我的代码哪里错了?

【问题讨论】:

  • 请选择一个更好的标题
  • 对不起,这是我在 stackoverflow 中的第一个主题
  • documentation 中所述,index() 只找到第一个匹配项。
  • for g in i: 这里你应该使用 enumerate...
  • @TigerhawkT3 我明白了,但我该如何解决这个问题?你知道另一个替代index() 的函数吗? @EricLevieil 我该怎么做?,我无法理解你

标签: python list function python-3.x


【解决方案1】:

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

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

这适用于具有重复元素的lists。

                                            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]
             ^^

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多