所以我想保留一個小計,但如果它小于右側的數字,我想從小計中減去這個數字。
例子:
# [100, 100, 100, 10, 100, 5, 1, 1]
for i in list:
if i < i 1:
num = int(i)
else:
num -= int(i)
return num
我希望這段代碼給我 397,但它添加了 10,而不是減去它
uj5u.com熱心網友回復:
對于這個用例,我認為您想遍歷串列索引,而不是串列值。然后您可以輕松地使用索引來獲取當前值和下一個值。
mylist = [100, 100, 100, 10, 100, 5, 1, 1]
for i in range(len(mylist)):
curval = mylist[i]
if i < len(mylist) - 1:
nextval = mylist[i 1]
if curval < nextval:
num = int(curval)
else:
num -= int(curval)
else:
num = int(curval)
return num
uj5u.com熱心網友回復:
您可以使用它來實作這一點。
l = [100, 100, 100, 10, 100, 5, 1, 1]
length = len(l)
num = 0
for index, value in enumerate(l):
if value < l[index 1 if index < length - 1 else index]:
num -= int(value)
else:
num = int(value)
print(num)
uj5u.com熱心網友回復:
用于zip構建值的元組。zip獲取原始串列和偏移量為 1 的副本作為引數。如果串列很大,這個想法可能不是最好的。
data = [100, 100, 100, 10, 100, 5, 1, 1]
total = 0
for left_value, right_value in zip(data, data[1:]]):
if left_value < right_value:
total -= left_value
else:
total = left_value
print(total)
結果是 396,但你想要 397。那么有什么問題?串列中的最后一個元素沒有匹配值,因為具有偏移量的串列缺少一個元素。但這很容易解決。只需再次添加最后一個元素。
for left_value, right_value in zip(data, data[1:] [data[-1]]):
單線替代方法:
total = sum(-left if left < right else left for left, right in zip(data, data[1:] [data[-1]]))
uj5u.com熱心網友回復:
一些簡單的事情可能是這樣的:
ls = [100, 100, 100, 10, 100, 5, 1, 1]
num = 0
for i, v in enumerate(ls):
try:
if ls[i] < ls[i 1]:
num -= v
except:
pass
管理例外是為了避免 IndexError
輸出:
-10
uj5u.com熱心網友回復:
迭代串列中連續的專案對的簡單方法是zip使用自身切片的串列。使用sum和一個簡單的三元運算式,您可以在一行中撰寫:
>>> nums = [100, 100, 100, 10, 100, 5, 1, 1] # don't call a list "list"
>>> sum(a if a >= b else -a for a, b in zip(nums, nums[1:])) nums[-1]
397
請注意,這nums[-1]是一種特殊情況,因為它沒有連續的數字b,這里我們選擇無條件地將其添加到總和中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/522489.html
標籤:Python列表和整数
