![](/img/trans.png)
[英]Python: Traverse list from end to find first element satisfying a condition
[英]Python Logic to find the sum of a sub list satisfying a condition
我需要找到-1
和-1
之間的列表元素的總和。
我試過這個解決方案,但它添加了元素1,2,3
到1,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)
這是一個無需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.