python - 将一个复杂的字符串 ('2,3-5,50-60,70' ) 分解到列表中

标签 python python-2.7 list-comprehension

复杂字符串:'2,3-5,50-52,70'

需要输出:[2,3,4,5,50,51,52,70]

这是我尝试并成功的

a = '2,3-5,50-52,70'
data = []
[data.extend(range(int(r.split('-')[0]),int(r.split('-')[1])+1)) if r.find('-') != -1 else data.append(int(r)) for r in a.split(',')]
print data

output achieved: [2, 3, 4, 5, 50, 51, 52, 70]

但我的问题是有没有办法在列表理解中做到这一点?我的意思是

data = [#对此处进行一些处理以直接输出]

而不是预先声明列表 data 并继续附加或扩展它。

P.S:我只想通过列表理解来实现它,而不需要定义额外的功能。

最佳答案

我怀疑是否有可能通过单一的列表推导式来做到这一点。不过,您可以滥用 sum() 并在一行中做其他可怕的事情:

sum([range(*(2 * map(int, c.split('-')))[:2]) + [int(c.split('-')[-1])] for c in text.split(',')], [])

更简洁的方法是使用生成器:

def parse_sequence(text):
    for chunk in text.split(','):
        parts = map(int, chunk.split('-'))

        if len(parts) == 1:
            yield parts[0]
        else:
            for n in xrange(parts[0], parts[1] + 1):
                yield n

请不要在一行中完成。第二种方法的速度是后者的两倍,而且编写起来并不难读。没有理由使用第一个。

关于python - 将一个复杂的字符串 ('2,3-5,50-60,70' ) 分解到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39415993/

相关文章:

python - 我想停止 pythoncom 工作

python - "list comprehension"和类似的意思是什么?它是如何工作的,我该如何使用它?

python - 使用 lambda 函数将 double for 循环转换为列表理解

python - 列表理解与迭代

python - WIN32 程序可以使用 MYSQL 通过 Django 身份验证系统进行身份验证吗?

python - 使用 seaborn barplot 绘制宽格式数据帧

python - Dask Dataframe "ValueError: Data is compressed as snappy but we don' t 已安装”

python - Chalice:无法通过 pynamodb 连接 DynamoDB

python - 使用类型和 __slots__ 动态创建类?

python-2.7 - 在 Python 中将彩色输出写入 CSV 文件