首页 > 解决方案 > 最难的python生成器面试题——数字范围的python生成器对象

问题描述

在python课程中得到了这个,仍然无法弄清楚:

输入- 所需范围的一串起点和终点。

输出- 一个数字生成器,包含所有范围内的所有数字。

问题:制作一个函数,只使用两个生成器表达式(没有 for 循环)。

示例

输入:

list(parse_ranges("1-2,4-4,8-10"))

期望的输出:

[1, 2, 4, 8, 9, 10]

到目前为止我所做的:

def parse_ranges(ranges_string):
    first_generator = ([int(i[0]),int(i[-1])] for i in ranges_string.split(','))
    second_generator = (range(j[0],j[1]) for j in first_generator)
    return second_generator

我的输出:

[range(1, 2), range(4, 4), range(8, 0)]

标签: pythonfunctiongenerator

解决方案


好吧,就是这样,但我不建议编写这样不可读的代码......

def parse_ranges(string):
    ranges = (tuple(map(int, (s.split('-')))) for s in string.split(','))
    return (x for r in ranges for x in range(r[0], r[1]+1) )


list(parse_ranges("1-2,4-4,8-10"))
# [1, 2, 4, 8, 9, 10]

推荐阅读