我有一個這樣的python串列:
a = ['1111', 1, '1112', 15, '1113', 21, '2221', 1, '2222', 34, '3331', 1, '3332', 54, '3333', 65]
奇數位置的字串表示 id 和步驟編號。前三個字符是 id,最后一個是步驟編號。而偶數指數中的數字代表持續時間。
現在,我想計算每個步驟編號的平均持續時間。
例如,如果我必須計算第二步的平均值,我需要考慮的串列項將是這樣的:
['1112', 15, '2222', 34, '3332', 54]和平均值將是(15 34 54) / 3。3 因為有 3 個字串的步驟編號為 2。
雖然在 3 的情況下只有 2 個行程。['1113', 21, '3333', 65]. 所以平均將是(21 65) / 2。
我現在不知道如何解決這個問題。這就是為什么我不包括代碼片段的原因。
PS:我不想為此問題使用任何外部庫。
uj5u.com熱心網友回復:
你可以這樣做:
a = ['1111', 1, '1112', 15, '1113', 21, '2221', 1, '2222', 34, '3331', 1, '3332', 54, '3333', 65]
def step_avg(l):
out_dict = dict()
l = {l[i]: l[i 1] for i in range(0, len(l), 2)}
for string in l:
step = int(string[3:])
if step not in out_dict:
out_dict[step] = (l[string], 1) # sum_of_values, num_of_values
else:
sum_of_values, num_of_values = out_dict[step]
out_dict[step] = (sum_of_values l[string], num_of_values 1)
for step in out_dict:
sum_of_values, num_of_values = out_dict[step]
out_dict[step] = (sum_of_values / num_of_values)
return out_dict
print(step_avg(a))
輸出:
{1: 1.0, 2: 34.333333333333336, 3: 43.0}
uj5u.com熱心網友回復:
您可以使用串列理解來過濾掉每第二個(第三個等)步驟:
every_second_step = [d for id, d in zip(a[::2], a[1::2]) if id[-1] == '2']
并找到平均值:
second_step_mean = sum(every_second_step) / len(every_second_step)
每第三步都一樣:
every_third_step = [d for id, d in zip(a[::2], a[1::2]) if id[-1] == '3']
third_step_mean = sum(every_third_step) / len(every_third_step)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347423.html
