IT高手
小弟我想問,在List中
X = [1,2,3],[1,4,5],[2,3,4],[2,5,6],[2,7,8]...(後面)
我想從後面往前看哪個元素是連續出現,並記錄連續出現次數以及沒有出現的次數。
以上面的Cases來說,希望得到結果為
連續出現次數:[(1,2),(2,3),(3,0),(4,2),(5,0),(6,0),(7,0),(8,0)]
連續未出現次數:[(1,3),(2,0),(3,2),(4,2),(5,1),(6,1),(7,0),(8,0)]
高深簡潔的語法我不會,以下是土法煉鋼的範例提供您參考:
repeat_count.py
X = [1,2,3],[1,4,5],[2,3,4],[2,5,6],[2,7,8]
noreapeat_list=[]
for i in X:
for j in i:
if j not in noreapeat_list: noreapeat_list.append(j)
noreapeat_list.sort() # 把陣列內容排序 結果為:[1,2,3...7,8]
# 下一列註解的程式跟上面五列的 noreapeat_list 結果一樣(但一個是list另一個是set)這邊列出來供您學習參考
# noreapeat_list=set(j for sub in X for j in sub)
print("norepeat_list:\n{}\n".format(noreapeat_list))
match,not_match=[],[]
for i in noreapeat_list:
count,countx=0,0
for j in range(len(X)-1,0,-1):
if i in X[j] and i in X[j-1]: # 判斷連續出現
count+=1
if count>0: count+=1
match.append((i,count))
for j in range(len(X)-1,0,-1):
if i not in X[j]: # 判斷連續未出現
countx+=1
else:
break
not_match.append((i,countx))
# 列出結果
print("連續 出現次數:{}".format(match))
print("連續未出現次數:{}".format(not_match))
執行結果:
$ python3 ./repeat_count.py
norepeat_list:
[1, 2, 3, 4, 5, 6, 7, 8]
連續 出現次數:[(1, 2), (2, 3), (3, 0), (4, 2), (5, 0), (6, 0), (7, 0), (8, 0)]
連續未出現次數:[(1, 3), (2, 0), (3, 2), (4, 2), (5, 1), (6, 1), (7, 0), (8, 0)]
又是熟悉的多層for迴圈
只要邏輯定義明確 沒有什麼是一個迴圈不能解決的
如果有 那就再來一個...^^"