我正在尝试编写一个函数,它将接受一个间隔字符串作为输入,例如"0-0,4-8,20-21,43-45",以生成每个范围内的所有数字,意思是:[0, 4, 5, 6, 7, 8, 20, 21, 43, 44, 45]
本练习需要使用生成器来完成此操作。我设法通过生成器解析了输入,但是我不能用同样的方法来填充数字。我正在尝试int()每个数字,这样我就可以利用range()来生成边缘内的所有数字。
这是我的概念代码-如何在每个间隔内生成数字?
def parse_ranges(arg):
arg = arg.split(",")
parsed= (line.split("-") for line in arg)
#Trying to parse each character to int to use range()
intervals= (int(i) for i in number for number in parsed)
# Even if I had the characters parsed to int, I still don't know how to produce the range
ranges = (range(interval[0],interval[1]) interval for interval in intervals)
return ranges
print(list(parse_ranges("0-0,4-8,20-21,43-45")))发布于 2020-01-09 03:47:32
def parse_ranges(arg):
arg = arg.split(",")
parsed = ((line.split("-")) for line in arg)
for pair in parsed:
yield from range(int(pair[0]), int(pair[1])+1)
print(list(parse_ranges("0-0,4-8,20-21,43-45")))
Out: [0, 4, 5, 6, 7, 8, 20, 21, 43, 44, 45]如果您希望将来自另一个生成器内部的生成器的值直接传递到外部生成器的消费者,则需要使用"yield from“表达式。(另外,请注意,您需要将每个范围的" to“末尾扩展+1,因为范围端点不包括在内。)
发布于 2020-01-09 03:47:39
您似乎遗漏了两个部分:range()的第二个参数需要超出您的期望;您可以通过yield from将控制从一个生成器传递给另一个生成器
def parse_ranges(arg):
for start, stop in (interval.split('-') for interval in arg.split(',')):
yield from range(int(start), int(stop) + 1)
print(*parse_ranges("0-0,4-8,20-21,43-45"))输出
% python3 test.py
0 4 5 6 7 8 20 21 43 44 45
%https://stackoverflow.com/questions/59652070
复制相似问题