造輪子 python group------給定一個字母或者字串,按順序計算字母或者字串出現的字元和次數
阿新 • • 發佈:2018-11-03
給定一個字母或者字串,按順序計算字母或者字串出現的字元和次數
example:
input = [1, 1, 1, 2, 3, 3, 3, 2, 2, 5, 5, 8, 8, 0]
except = [[1, 3], [2, 1], [3, 3], [2, 2], [5, 2], [8, 2], [0, 1]]
因為字典裡面key是唯一的,並且無序。不能用元組來儲存。只能用列表
def list_count(input_list):
ret = []
for key, value in enumerate(input_list):
if key == len(input_list)-1:
if input_list[-1] != input_list[-2]: # 判斷結尾,如果最後一個數和前一個不同就直接新增。否則pass.
ret.append([value, 1])
break
elif input_list[key] == input_list[key+1]: # 判斷當前值和後面的值是否相同。
if ret and ret[-1][0] == value: # 如果ret不為空並且ret最後一個列表裡面的key等於當前值,執行加1操作。
ret[-1][-1] += 1
else:
# 否則append進去一個列表,值為2.
ret.append([input_list[key], 2])
elif input_list[key] != input_list[key+1]:
# 如果當前值不等於下一個值。
if not ret or ret[-1][0] != value: # 如果ret為空,或者ret最後一個列表裡面的key不等於當前值,新增一個列表到ret中,值為1。
ret.append([input_list[key], 1])
return ret
之所以會寫這個,是在leetcode上遇到的問題。這種寫法比較笨。當時考慮其他的沒有嘗試這種做法, 這裡記錄一下這種寫法。 原題
原題還有一些其他的解法,比如用正則,或者
----------------------------------分割線--------------------------------------------------
寫完了才發現這方法python已經封裝了。
from itertools import groupby
這個方法之前就看到了,一直沒用到。時間長就忘了還有這樣一個函式。
from itertools import groupby
[[key, len(list(group))] for key, group in itertools.groupby("applabbc")]
具體用法看官方文件是最好不過了