簡體   English   中英

查找滿足條件的子列表的總和的Python邏輯

[英]Python Logic to find the sum of a sub list satisfying a condition

我需要找到-1-1之間的列表元素的總和。

我試過這個解決方案,但它添加了元素1,2,31,1,1,1 。你能幫我更好的邏輯嗎?

lis = [1,2,3,4,-1,1,1,1,1,-1,1,2,3]
sum = 0
newlis = []
    for i in range(0,len(lis)-1):
        if lis[i] == -1:
            while i+1 < len(lis) and lis[i+1]!=-1:
                sum = sum+lis[i+1]
                i = i+1
print(sum)

您可以使用:

idx = [i for i, v in enumerate(lis, 1) if v == -1]
print(sum(lis[idx[0]:idx[1]-1]))
# 4

演示

這是一個無需lambda工作的示例

lis = [1,2,3,4,-1,1,1,1,1,-1,1,2,3]

first = lis.index(-1) + 1
second = lis[first:].index(-1) + first

result = sum(lis[first:second])

我們可以首先計算出現 -1 的索引:

In [12]: l = [1,2,3,4,-1,1,1,1,1,-1,1,2,3]
In [16]: indexes = [index for index in range(len(l)) if l[index] == -1]
In [17]: indexes
Out[17]: [4, 9]

現在,我們知道 -1 出現在索引 4 和 9 處。要驗證我們有正確的一組數字:

In [20]: l[indexes[0]:indexes[1]]
Out[20]: [-1, 1, 1, 1, 1]

因此,現在計算總和更容易:

In [19]: sum(l[indexes[0]:indexes[1]])
Out[19]: 3

一種方法是您可以創建一個布爾標志,當您看到 -1 時將其設置為 true,並在您看到第二個 -1(或中斷)時將其設置回 false。 如果標志為真,則添加數字。

lis = [1,2,3,4,-1,1,1,1,1,-1,1,2,3]
sum = 0
flag = False;
for i in range(len(lis)):
    if not flag:
        if lis[i] == -1:
            flag = True
    elif lis[i] == -1:
        flag = False #this line could be omitted
        break
    else:
        sum += lis[i]
print(sum)

你是這個意思嗎?

sum(filter(lambda n: -1 <= n <= 1, lis))

或沒有 lambda:

def f(n):
  return -1 <= n <= 1

sum(filter(f, lis))

您可以使用lis.index找到第一個 -1。 它還提供了第二個參數用於從哪里開始搜索,因此您也可以使用它來查找第二個 -1。 然后只需獲取它們之間的切片並將其求和。

>>> start = lis.index(-1) + 1
>>> stop = lis.index(-1, start)
>>> sum(lis[start:stop])
4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM