首页 > 解决方案 > 如何通过列表解析这些操作?

问题描述

节目说明:

程序接受l包含其他列表的列表。l长度大于 3 的列表的输出将相应更改:具有索引的元素3将是已删除元素的总和(从第三个到末尾)。

我的解决方案:

l = [[1,2], [3,4,4,3,1], [4,1,4,5]]
s = 0
for i in range(len(l)-1):
  if len(l[i]) > 3:
      for j in range(3,len(l[i])-1):
        s += l[i][j]
        l[i].remove(l[i][j])
      l[i].insert(len(l[i]),s)
l

测试:

Input: [[1,2], [3,4,4,3,1], [4,1,4,5]]
Expected Output: [[1, 2], [3, 4, 8], [4, 1, 9]]

程序运行:

Input: [[1,2], [3,4,4,3,1], [4,1,4,5]]
Output: [[1, 2], [4, 4, 3, 1, 3], [4, 1, 4, 5]]

问题:我不明白在这种情况下问题的根源是什么,为什么要在末尾添加一些额外的数字,而不是 summ。我将不胜感激。

标签: pythonalgorithm

解决方案


remove是错误的功能。你应该del改用。阅读文档以了解原因。

另一个错误是您没有重置s。它应该设置0在外部 for 循环中。

但是你把它弄得太复杂了。我认为最好展示一下你如何做到这一点真的很容易。

for e in l:              # No need for range. Just iterate over each element
    if len(e) > 3:
        e[2]=sum(e[2:])  # Sum all the elements
        del(e[3:])       # And remove

或者,如果您希望它作为创建新列表且不更改旧列表的列表推导:

[e[0:2] + [sum(e[2:])] if len(e)>3 else e for e in l]

推荐阅读