python - 如何在Python中的列表中间总结所有相邻的非零值
问题描述
我是 Python 的初学者。我需要解决一个汇总列表中相邻非零值的问题。
说,我有一个名为
a = [2, 3, 0, 0, 1, 0, 3, 3, 1, 0, 0].
在 a 中,将有多个元素非零的实例。例如,2 和 3 是相邻的,所以我想总结它们,所以我会得到 5。
然后,还有另一个相邻的元素是 3、3 和 1。这是我面临问题的地方,因为我想将其总结为 7。
但是在我尝试的代码中,它仍然打印出 4,这是 a[7] 和 a[8] 的总和。有什么办法可以避免这种情况吗?
c =[]
for i in range(1, len(a)):
if a[i-1] != 0:
if a[i] != 0:
tot = a[i] + a[i-1]
c.append(tot)
if a[i+1] != 0:
tot = tot + a[i+1]
c.append(tot)
else:
tot = 0;
continue
解决方案
您可以使用itertools.groupby
和理解:
>>> import itertools
>>> a = [2, 3, 0, 0, 1, 0, 3, 3, 1, 0, 0]
>>> [sum(v) for k, v in itertools.groupby(a, key=lambda x: x != 0) if k != 0]
[5, 1, 7]
推荐阅读
- node.js - 什么可能阻止我的更新路线不起作用?
- javascript - Javascript - 循环从 API 调用到 JSON 的结果,并以 HTML 格式打印
- makefile - Makefile 在源更新时重建项目
- python - cv2.imshow() 在 PyCharm (MacOS) 中无法正常工作
- arrays - 用用户输入字符串替换提供的字符串?
- python-3.x - 从python中的特定整数值开始复制和重命名文件
- c - 实现 malloc() 时 brk() 超出堆
- python-3.x - 如何在 TKINTER 上使用自定义字体
- sublimetext3 - 是否可以在 Sublime Text 3 中禁用模糊搜索?
- flutter - 异步函数只返回 null (Flutter)