我有一個陣列,例如 [A,A,A,B,B,C,A,A,D,D,D,B]
我想計算條目并將其轉換為此 [3A,2B,1C,2A,3D,1B]
我已經嘗試了很多 if else 型別的邏輯,但我遇到了問題。有沒有一種巧妙的方法來做到這一點?
uj5u.com熱心網友回復:
似乎很好地使用itertools.groupby:
from itertools import groupby
l = ['A','A','A','B','B','C','A','A','D','D','D','B']
[f'{len(list(g))}{k}' for k, g in groupby(l)]
# ['3A', '2B', '1C', '2A', '3D', '1B']
uj5u.com熱心網友回復:
這是解決此問題的一種方法。
letters = ['A', 'A', 'A', 'B', 'B', 'C', 'A', 'A', 'D', 'D', 'D']
previous_letter = letters[0]
counter = 1
res = list()
for i in range(1, len(letters)):
current_letter = letters[i]
if current_letter == previous_letter:
counter = 1
else:
res.append(f"{counter}{current_letter}")
previous_letter = letters[i]
counter = 1
res.append(f"{counter}{previous_letter}")
print(res)
訣竅在于檢查字母的變化并跟蹤計數。
uj5u.com熱心網友回復:
您可以嘗試使用list.count()來獲取第一項出現的次數,然后list.pop(list.index())在 for 回圈中使用以洗掉第一項的所有出現,在 while 回圈中執行此操作,直到len(lst)回傳 0
out = []
while len(lst) > 0:
s = lst[0]
c = 0
while len(lst) > 0:
if lst[0] == s:
c = 1
lst.pop(0)
out.append(f"{c}{s}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413812.html
標籤:
