iT邦幫忙

0

Python 想找出List連續出現次數,以及連續未出現次數

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)]

1 個回答

0
ccutmis
iT邦高手 4 級 ‧ 2021-02-01 12:34:31
最佳解答

高深簡潔的語法我不會,以下是土法煉鋼的範例提供您參考:

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迴圈
只要邏輯定義明確 沒有什麼是一個迴圈不能解決的
如果有 那就再來一個...^^"

我要發表回答

立即登入回答