1. 程式人生 > >造輪子 python group------給定一個字母或者字串,按順序計算字母或者字串出現的字元和次數

造輪子 python group------給定一個字母或者字串,按順序計算字母或者字串出現的字元和次數

給定一個字母或者字串,按順序計算字母或者字串出現的字元和次數

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

具體用法看官方文件是最好不過了