查找具有条件的列表总和

时间:2017-08-22 05:55:22

标签: python

我遇到了问题。

我有一份清单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

4 个答案:

答案 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. https://docs.python.org/3/library/functools.html#functools.reduce

答案 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]