请问如何计算 Python 列表连续正数或连续负数的和?
source link: https://www.v2ex.com/t/796730
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
请问如何高效计算 Python 列表连续正数或连续负数的和?
案例:[1,3,5,-2,-1,3,5,2,-1,-3,-3]
期望结果:[9,-3,10,-7]
lizytalk 13 小时 9 分钟前 5
x = [1,3,5,-2,-1,3,5,2,-1,-3,-3]
list(map(lambda item: sum(item[1]), groupby(x, key=lambda _: _ > 0)))
ch2 13 小时 7 分钟前
upper=[]
lower=[]
result=[]
for num in nums:
if num>0:
if len(upper)==0:
if len(lower)>0:
result.append(sum(lower))
lower=[]
upper.append(num)
else:
if len(lower)==0:
if len(upper)>0:
result.append(sum(upper))
upper=[]
lower.append(num)
if len(upper) > 0:
result.append(sum(upper))
if len(lower) > 0:
result.append(sum(lower))
print(result)
kasusa 13 小时 5 分钟前
list1 = [1,3,5,-2,-1,3,5,2,-1,-3,-3] #原数据
list2 = [] #结果输出
a = list1[0] #计算从 2 开始
for index in range(1,len(list1)):
if list1[index] * list1[index - 1] < 0: #有换号,将结果添加到 list2,、把 a 归零
list2.append(a)
a = 0
a += list1[index]
else: #无换号,正常累加
a += list1[index]
list2.append(a) #将最后一个累加结果加入结果集
print(list2)
```
用到了数学中零点判定的知识。
msg7086 12 小时 38 分钟前
x = [1, 3, 5, -2, -1, 3, 5, 2, -1, -3, -3]
x.chunk(&:positive?).map(&:last).map(&:sum) #=> [9, -3, 10, -7]
Python 里如果有类似的方法的话照着改一下就行了吧。
huntagain2008 12 小时 34 分钟前
``` python
a=[1,3,5,-2,-1,3,5,2,-1,-3,-3]
b=[]
for i in range(len(a)):
if i<len(a)-1:
if a[i]*a[i+1]>0:
a[i+1]=a[i]+a[i+1] # 比如 1+3 取 4 的结果放在下标 a[1]
else:
b+=[a[i]] # 遇到正负不同的,比如遇到-2 取 a[2]作为和
huntagain2008 12 小时 30 分钟前
``` python
a=[1,3,5,-2,-1,3,5,2,-1,-3,-3]
b=[]
for i in range(len(a)):
if i<len(a)-1:
if a[i]*a[i+1]>0:
a[i+1]=a[i]+a[i+1] # 比如 1+3 取 4 的结果放在下标 a[1]
else:
b+=[a[i]] # 遇到正负不同的,比如遇到-2 取 a[2]作为和
```
huntagain2008 12 小时 11 分钟前
a=[-2,1,3,5,-2,-1,3,5,2,-1,-3,-3]经过这段代码变成了[-2, 1, 4, 9, -2, -3, 3, 8, 10, -1, -4, -7]
b 的值只有[-2, 9, -3, 10],后面的-12 没有求和了。
huntagain2008 10 小时 59 分钟前
>>>a=[-2, 1, 4, 9, -2, -3, 3, 8, 10, -1, -4, -7]
>>> b=[]
>>> for i in range(len(a)):
... if i<len(a)-1:
... if a[i]*a[i+1]>0:
... a[i+1]=a[i]+a[i+1] # 比如 1+3 取 4 的结果放在下标 a[1]
... else:
... b+=[a[i]] # 遇到正负不同的,比如遇到-2 取 a[2]作为和
... else:
... b+=[a[i]] # 最后一次求和
...
>>> b
[-2, 14, -5, 21, -12]
huntagain2008 10 小时 42 分钟前
>>>a=[-2, 1, 4, 9, -2, -3, 3, 8, 10, -1, -4, -7]
>>> b=[]
>>> for i in range(len(a)):
... if i<len(a)-1:
... ... if a[i]*a[i+1]>0:
... ... ... a[i+1]=a[i]+a[i+1] # 比如 1+3 取 4 的结果放在下标 a[1]
... ... else:
...... ... b+=[a[i]] # 遇到正负不同的,比如遇到-2 取 a[2]作为和
... else:
... ... b+=[a[i]] # 最后一次求和
...
>>> b
[-2, 14, -5, 21, -12]
Gorgine 9 小时 51 分钟前
your_list = [1, 3, 5, -2, -1, 3, 5, 2, -1, -3, -3]
print([sum(item[1]) for item in groupby(your_list, lambda item: item > 0)])
lostvincent 9 小时 25 分钟前
list = [...]
result = []
total = list[0]
for (i = 1; i < len(list)); i++) {
// total 和 list[i] 同符号
if ((total > 0) === (list[i] > 0)) {
total += list[i]
} else {
append(result, total)
total = list[i]
}
}
append(result, total)
return result
========
思路就是 total 记录累加
total 和当前元素符号(正负号)不同了,就记录累加结果到 result,重置 total 然后开始下一轮
题目写的是连续正负数,如果有 0 的话,遇到直接 continue
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK