python list使用示例 list中找连续的数字

yipeiwu_com5年前Python基础

线上有个需求,格式化,从一堆s1,s100-s199中找出连续的服并且格式化显示出来,如:

神魔:S106-109,s123,s125
御剑: s106-109,s123,s125

复制代码 代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#  2014/01/15 14:15
import sys
from itertools import *
from operator import itemgetter
def parse(filename):
    d = {}
    for line in open(filename, 'r'):
        _line = line.split()
        d.setdefault(_line[0], []).append(_line[1])
    for key in d.keys():
        data = sorted(map(lambda x: int(x[1:]), d[key]))
        sys.stdout.write(key + " ")
        for k, g in groupby(enumerate(data), lambda (i, x): i - x):
            ret = map(itemgetter(1), g)
            if len(ret) > 1:
                sys.stdout.write("S%d-%d," % (ret[0], ret[-1]))
            elif len(ret) == 1:
                sys.stdout.write(str("S%s") % ret[0] + ",")
        sys.stdout.write('\n')
if __name__ == "__main__":
    filename = sys.argv[1]
    parse(filename)

相关文章

解决使用PyCharm时无法启动控制台的问题

问题: 使用PyCharm时无法启动控制台? 今天打开PyCharm时突然无法启动控制台,IPython和Python本身都无法使用 解决: 很有可能你安装了较高版本的ipython...

python科学计算之scipy——optimize用法

写在前面 SciPy的optimize模块提供了许多数值优化算法,下面对其中的一些记录。 非线性方程组求解 SciPy中对非线性方程组求解是fslove()函数,它的调用形式一般为fsl...

python内置函数:lambda、map、filter简单介绍

lambda lambda可以理解为一种小函数,但是它是一个表达式,而不是一个语句,所以在def不允许出现的地方仍然可以使用lambda函数,例如list里。但是lambda内只可以执行...

Python中返回字典键的值的values()方法使用

 values()方法返回给定的字典中所有可用值的列表。 语法 以下是values()方法的语法: dict.values() 参数   &...

pandas实现将日期转换成timestamp

pandas实现将日期转换成timestamp

OUTLINE 常见的时间字符串与timestamp之间的转换 日期与timestamp之间的转换 常见的时间字符串与timestamp之间的转换 这里说的字符串不是一般意义上的字符串,...