我必須做一個練習,要求我做一個函式來查找串列中連續值的頻率并回傳一個元組串列,我必須在其中顯示重復的次數。
輸入:
[1, 1, 1, 3, 5, 1, 1, 3, 3]
輸出:
[(1,3) , (3,1) , (5,1) , (1,2) , (3,2)]
代碼:
def empaquetar(l):
lista = []
for i in range(len(l)-1):
cont = 0
j = i 1
while l[i] == l[j] and j<len(l)-1:
cont = 1
i = 1
j = 1
if cont > 0:
lista.append((l[i], cont 1))
else:
lista.append((l[i],1))
return lista
好吧,我寫的東西并沒有完全回傳我想要的東西,我找不到解決方案,但我搜索了很多,例如集合中的工具 Counter 或類似的東西。我需要幫助,有什么建議嗎?
uj5u.com熱心網友回復:
沒有徹底測驗,但這里是一個嘗試
prev_val = None
counter = 1
for curr_val in input_list:
if prev_val is not None:
if prev_val != curr_val:
output_list.append((prev_val, counter))
counter = 1
else:
counter = 1
prev_val = curr_val
output_list.append((prev_val, counter))
print (output_list)
uj5u.com熱心網友回復:
from itertools import groupby
lista = [group[0], len(list(group[1])) for group in groupby(l)]
uj5u.com熱心網友回復:
我O(n)為此開發了一個時間復雜度為 的演算法。
def consecutive(lst):
lst.append(0)
count = 1
result = []
for i, value in enumerate(lst):
if value == lst[min(len(lst) - 1, i 1)]:
count = 1
else:
result.append((value, count))
count = 1
return result
結果
讓我們為這個函式嘗試一些測驗用例。
>>> lst = [1, 1, 1, 3, 5, 1, 1, 3, 3]
>>> consecutive(lst)
[(1, 3), (3, 1), (5, 1), (1, 2), (3, 2)]
這是驗證代碼的另一個測驗用例。
>>> lst = [1, 2, 5, 5, 3, 2, 2, 1]
>>> consecutive(lst)
[(1, 1), (2, 1), (5, 2), (3, 1), (2, 2), (1, 1)]
uj5u.com熱心網友回復:
使用第二個 for 回圈來檢查數字連續出現的次數。
def empaquetar(l):
lista = []
for i in l:
cont = 1
for j in range(i 1, len(l)):
If l[j]==i:
cont = 1
else:
break
lista.append((i, cont))
return lista
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/335888.html
上一篇:插入成功后如何停止遞回?
