在蟒蛇的课程中得到了这个,仍然无法弄清楚:
输入-一个字符串的开始和结束点的一个期望的范围。
Output --包含所有范围内所有数字的数字生成器。
The problem:创建一个函数,只使用两个生成器表达式(不用于循环)。
示例
输入:
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)]发布于 2020-12-13 20:43:48
好吧,就这样,但我不建议写这么难读的代码.
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]发布于 2020-12-13 20:55:24
我的两分钱:
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)))输出
[1, 2, 4, 8, 9, 10]https://stackoverflow.com/questions/65280346
复制相似问题