首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最难的python生成器访问问题- python生成器的数字范围对象

最难的python生成器访问问题- python生成器的数字范围对象
EN

Stack Overflow用户
提问于 2020-12-13 20:30:57
回答 2查看 345关注 0票数 1

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

输入-一个字符串的开始和结束点的一个期望的范围。

Output --包含所有范围内所有数字的数字生成器。

The problem:创建一个函数,只使用两个生成器表达式(不用于循环)。

示例

输入:

代码语言:javascript
复制
list(parse_ranges("1-2,4-4,8-10"))

期望产出:

代码语言:javascript
复制
[1, 2, 4, 8, 9, 10]

到目前为止,我所做的是:

代码语言:javascript
复制
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

我的产出:

代码语言:javascript
复制
[range(1, 2), range(4, 4), range(8, 0)]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-13 20:43:48

好吧,就这样,但我不建议写这么难读的代码.

代码语言:javascript
复制
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]
票数 2
EN

Stack Overflow用户

发布于 2020-12-13 20:55:24

我的两分钱:

代码语言:javascript
复制
s = "1-2,4-4,8-10"


def parse_ranges(s):
    ranges = ((int(start), int(stop) + 1) for start, stop in (chunk.split('-') for chunk in s.split(',')))
    yield from (i for start, end in ranges for i in range(start, end))


print(list(parse_ranges(s)))

输出

代码语言:javascript
复制
[1, 2, 4, 8, 9, 10]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65280346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档