造轮子 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")]

具体用法看官方文档是最好不过了

    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bd3bf692b717778ac20c969
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞