gpt4 book ai didi

python - 我使用生成器表达式有什么问题?

转载 作者:行者123 更新时间:2023-12-01 00:46:41 26 4
gpt4 key购买 nike

我有以下代码,其中我尝试将范围的字符串表示形式转换为数字列表。例如,如果输入为 '0-0,3-5,7-10',则预期输出为 [0,3,4,5,7,8,9,10 ]。但是,我在以下位置收到错误:

for l,h in r.split('-') 

它说没有足够的值来解压。我的推理是,r应该具有'x-y'形式,所以如果我用'-'分割它,我应该得到返回两个值。这有什么问题吗?

def parse_ranges(ranges):
"""Return a list of numbers corresponding to number ranges in a string"""
g = (
(l,h)
for r in ranges.split(',')
for l,h in r.split('-')
)
return (x
for range_tuple in g
for l,h in range_tuple
for x in range(int(l), int(h)+1)
)

parse_ranges('0-5,8-10,11-13')

最佳答案

你的循环太多了。由于您试图将两个数字保持在一起,因此不需要第二个嵌套循环。第二个是压平结果:

>>> [x for r in s.split(',') for x in r.split('-')]
['0', '0', '3', '5', '7', '10']

使用 1 来保持数字配对:

>>> [r.split('-') for r in s.split(',')]
[['0', '0'], ['3', '5'], ['7', '10']]

然后,通过第二个推导式,您可以通过将 lh 解包来组合前两个 for 循环。

return (x
for l,h in g
for x in range(int(l), int(h)+1)
)

关于python - 我使用生成器表达式有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56926573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com