我有以下代码,其中我尝试将范围的字符串表示转换为数字列表。例如,如果输入为“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')
如果您的目标是将该格式的字符串解析为int列表,那么使用正则表达式来解析它可能是值得的
def parse_ranges(ranges):
"""Return a list of numbers corresponding to number ranges in a string"""
return re.split(',|-', ranges)
parse_ranges('0-5,8-10,11-13')
输出:
['0', '5', '8', '10', '11', '13']
要将它们作为int而不是字符串获取,可以执行以下操作:
def parse_ranges(ranges):
"""Return a list of numbers corresponding to number ranges in a string"""
return (int(x) for x in re.split(',|-', ranges))
list(parse_ranges('0-5,8-10,11-13'))
输出:
[0, 5, 8, 10, 11, 13]
intspan模块就是这样做的。
import intspan
s = '0-0,3-5,7-10'
>>> list(intspan.intspan(s))
[0, 3, 4, 5, 7, 8, 9, 10]
你的循环太多了。因为你试图将两个数字放在一起,所以你不需要第二个嵌套循环。第二个是平坦结果:
>>> [x for r in s.split(',') for x in r.split('-')]
['0', '0', '3', '5', '7', '10']
使用其中一个保持数字成对:
>>> [r.split('-') for r in s.split(',')]
[['0', '0'], ['3', '5'], ['7', '10']]
然后,在第二次理解中,您可以将前两个循环组合在一起,方法是将l和h拆包到位。
return (x
for l,h in g
for x in range(int(l), int(h)+1)
)
Quartz 的Cron任务调度表达式一般人很难理解,在Googole上查询也没有发现类似的代码,所以开发了一个对Quartz Cron 表达式的可视化双向解析和生成的一个java的GUI程序,供使用Quartz的程序员参考和使用,源代码放在SourceForge网站
问题内容: 在这里看到讨论之后:Python-产生时差,我很好奇。我最初还以为生成器比列表快,但是当涉及sorted()时我不知道。将生成器表达式发送到sorted()而不是列表有什么好处吗?生成器表达式最终是否仍要在sorted()内放入列表中? 编辑:我只能接受一个答案让我感到悲伤,因为我感到很多答复都有助于澄清这个问题。再次感谢大家。 问题答案: 首先要做的是将数据转换为列表。基本上,实现的
问题内容: 在Python中,通过 生成器表达式 创建生成器对象与使用 yield 语句之间有什么区别吗? 使用 yield : 使用 生成器表达式 : 这两个函数都返回生成器对象,这些对象生成元组,例如(0,0),(0,1)等。 一个或另一个有什么优势吗?有什么想法吗? 谢谢大家!这些答案中有很多不错的信息和进一步的参考! 问题答案: 两者之间只有细微的差别。您可以使用该模块自己检查这种事情。
本文向大家介绍python 中的列表生成式、生成器表达式、模块导入,包括了python 中的列表生成式、生成器表达式、模块导入的使用技巧和注意事项,需要的朋友参考一下 5.16 列表生成式 5.17 列表生成式与生成器表达式的应用 第六章模块 什么是模块? 模块就是一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module 6.1 import
问题内容: 这个问题已经在这里有了答案 : 生成器表达式使用生成器创建后分配的列表 (5个答案) 去年关闭。 我正在运行一段代码,该代码在程序的某个部分意外出了逻辑错误。在研究本节时,我创建了一个测试文件来测试正在运行的语句集,并发现了一个看起来很奇怪的异常错误。 我测试了以下简单代码: 输出为: 是的,什么都没有。我期望过滤器理解能获得2中的项并输出,但是我没有得到: 当我注释掉第三行再次对其进
问题内容: 什么时候应该使用生成器表达式,什么时候应该在中使用列表推导? 问题答案: John的答案很好(当你要迭代多次时,列表理解会更好)。但是,还应注意,如果要使用任何列表方法,都应使用列表。例如,以下代码将不起作用: 基本上,如果你要做的只是迭代一次,则使用生成器表达式。如果你要存储和使用生成的结果,那么列表理解可能会更好。 由于性能是选择彼此的最常见原因,所以我的建议是不要担心它,而只选择