我有一個元組串列,每個元組都有一個字串和一個整數值:
list_a= [('0', 60), ('0', 5), ('2', 1), ('3', 14), ('4', 39), ('1', 17), ('2', 14), ('2', 29), ('4', 1), ('3', 1), ('3', 16), ('4', 8)]
如果字串相同并且僅當字串彼此相鄰時,我想添加值,使輸出看起來像:
result=[('0', 65), ('2', 1), ('3', 14), ('4', 39), ('1', 17), ('2', 43), ('4', 1), ('3', 17), ('4', 8)]
不使用任何匯入的包
uj5u.com熱心網友回復:
您可以嘗試以下操作;累積值直到“鍵”發生變化:
list_a = [('0', 60), ('0', 5), ('2', 1), ('3', 14), ('4', 39), ('1', 17), ('2', 14), ('2', 29), ('4', 1), ('3', 1), ('3', 16), ('4', 8)]
output = []
v_accu = 0 # value accumulator
k_prev = None
for k, v in list_a:
if k_prev is not None and k != k_prev: # can omit "is not None"
output.append((k_prev, v_accu)) # insert the accumulated value so far
v_accu = v # reset the accumulator
else:
v_accu = v # keep adding
k_prev = k # update k_prev
output.append((k_prev, v_accu)) # final insertion
print(output)
# [('0', 65), ('2', 1), ('3', 14), ('4', 39), ('1', 17), ('2', 43), ('4', 1), ('3', 17), ('4', 8)]
但是對于一些標準模塊,你可以用更簡單的方式來完成:
from itertools import groupby
from operator import itemgetter
list_a = [('0', 60), ('0', 5), ('2', 1), ('3', 14), ('4', 39), ('1', 17), ('2', 14), ('2', 29), ('4', 1), ('3', 1), ('3', 16), ('4', 8)]
output = [(k, sum(map(itemgetter(1), g))) for k, g in groupby(list_a, key=itemgetter(0))]
print(output)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367471.html
上一篇:根據運氣選擇正確的專案Lua
下一篇:跨資料表串列操作
