python - 如何通过列表解析这些操作?
问题描述
节目说明:
程序接受
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。我将不胜感激。
解决方案
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]
推荐阅读
- typescript - Preact:重新加载时有时会出现空白页面
- json - 带有数据的 Union 类型的 Elm JSON 解码器
- python - 如何使用 cx_oracle 将存储在 python 变量中的数据发送到 oracle 数据库表?
- node.js - 为什么 css loader 不能在 react 16.6 上使用 npm 运行弹出
- python - 从用户 root 运行 pyspark2 时权限被拒绝
- python - 如果 plt.pause 如此重要,为什么在任何教程中都没有描述它?(或者我做错了吗?)
- node.js - Mongodb查询文档数组字段长度不取数组
- django - 如何查看导致 Django 迁移错误的 SQL 查询?
- python - 具有相对导入和 pytest 的 Python 项目结构
- mysql - 在 MYSQL 中创建组织数据库