我正在尋找一種方法來列印串列中連續相似專案的總和。
有沒有更好的代碼來做到這一點?我的代碼缺少給出最后結果!有什么建議嗎?
[代碼]
lst=[' 1', '-1', '-1', '-1', ' 1', '-1', ' 1', ' 1']
output=[]
s=int(lst[0])
for i in range(1,len(lst)):
if lst[i]==lst[i-1]:
s =int(lst[i])
else:
output.append("{0: }".format(s))
s=int(lst[i])
print(output)
[輸入]
[' 1', '-1', '-1', '-1', ' 1', '-1', ' 1', ' 1']
[預期輸出]
[' 1', '-3', ' 1', '-1', ' 2']
[當前未完成輸出]
[' 1', '-3', ' 1', '-1']
uj5u.com熱心網友回復:
您可以使用 itertools.groupby
>>> from itertools import groupby
>>>
>>> a = [' 1', '-1', '-1', '-1', ' 1', '-1', ' 1', ' 1']
>>>
>>> result = [sum(map(int, group)) for key, group in groupby(a)]
>>> result
[1, -3, 1, -1, 2]
但請注意,這將回傳一個整數串列,但您可以再次迭代結果以對其進行格式化
>>> [f"{' ' if r > 0 else ''}{r}" for r in result]
[' 1', '-3', ' 1', '-1', ' 2']
uj5u.com熱心網友回復:
您還需要在總結時跟蹤您的 current_element 。并且還需要在 for 回圈之后將總和附加到末尾。
lst = [' 1', '-1', '-1', '-1', ' 1', '-1', ' 1', ' 1']
lst = [int(i) for i in lst]
output = []
s = lst[0]
current_element = lst[0]
for i in range(1,len(lst)):
if current_element == lst[i]:
s = lst[i]
else:
output.append("{0: }".format(s))
s = lst[i]
current_element = lst[i]
output.append("{0: }".format(s))
print(output)
uj5u.com熱心網友回復:
也許使用grupby從itertools:
from itertools import groupby
lst=[' 1', '-1', '-1', '-1', ' 1', '-1', ' 1', ' 1']
result = [f"{sum(map(int, l[1])): }" for l in groupby(lst)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368103.html
上一篇:如何獲取串列中最大值的索引,然后使用最大值的索引列印另一個串列中的值?
下一篇:創建嵌套遞回串列而不切片
