复杂字符串:'2,3-5,50-52,70'
需要输出:[2,3,4,5,50,51,52,70]
这是我尝试并成功的
a = '2,3-5,50-52,70'
data = []
[data.extend(range(int(r.split('-')[0]),int(r.split('-')[1])+1)) if r.find('-') != -1 else data.append(int(r)) for r in a.split(',')]
print data
output achieved: [2, 3, 4, 5, 50, 51, 52, 70]
但我的问题是有没有办法在列表理解中做到这一点?我的意思是
data = [#对此处进行一些处理以直接输出]
而不是预先声明列表 data
并继续附加或扩展它。
P.S:我只想通过列表理解来实现它,而不需要定义额外的功能。
最佳答案
我怀疑是否有可能通过单一的列表推导式来做到这一点。不过,您可以滥用 sum()
并在一行中做其他可怕的事情:
sum([range(*(2 * map(int, c.split('-')))[:2]) + [int(c.split('-')[-1])] for c in text.split(',')], [])
更简洁的方法是使用生成器:
def parse_sequence(text):
for chunk in text.split(','):
parts = map(int, chunk.split('-'))
if len(parts) == 1:
yield parts[0]
else:
for n in xrange(parts[0], parts[1] + 1):
yield n
请不要在一行中完成。第二种方法的速度是后者的两倍,而且编写起来并不难读。没有理由使用第一个。
关于python - 将一个复杂的字符串 ('2,3-5,50-60,70' ) 分解到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39415993/