我遇到了问题。
我有一份清单L = [1,2,3,4,5,6,7,8,9]
我想在列表中找到元素的总和,这样,如果总和超过25,我想获得前一个总和。
例如。 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28,28> 25。因此,我希望最终变量总和为21。
我使用 for-if组合进行此操作,但我不想使用 if 。有没有更好的方法呢?下面是我的代码。
L = [1,2,3,4,5,6,7,8,9]
summ = 0
for val in L:
summ+= val
if summ > 25:
summ-=val
答案 0 :(得分:3)
我觉得困扰你的是summ-=val
部分,而不是 if 。并且有一个reduce
的单行解决方案。
>>> from functools import reduce
>>> L = [1,2,3,4,5,6,7,8,9]
>>> reduce(lambda x, y: x + y if x + y <= 25 else x, L)
21
答案 1 :(得分:1)
您可以使用while
循环:
L = [1,2,3,4,5,6,7,8,9]
i = 0
s = 0
while i < len(L) and s + L[i] < 25:
s += L[i]
i += 1
答案 2 :(得分:0)
如何将条件整合到数学表达式中:
def news_params
params.require(:news).permit(:title, :description, :category, images_attributes: [:id, :news_id, :_destroy, img: []])
end
答案 3 :(得分:0)
使用pandas,对包含列表中数字的系列进行累计求和。将值NaN
分配给max_value
上的任何累计总和。填写结果并转换回整数列表。
import pandas as pd
max_val = 25
a = range(1, 10)
s = pd.Series(a).cumsum()
s.loc[s > max_val] = np.nan
>>> s.ffill().astype(int).tolist()
[1, 3, 6, 10, 15, 21, 21, 21, 21]