Форум сайта python.su
>> string = '1-6,8-23,25-26'
>> [range(*z) + [z[-1]] for z in [tuple(y) for y in [[int(y) for y in x.split('-')] for x in string.split(',')]]]
>>[[1, 2, 3, 4, 5, 6], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], [25, 26]]
>> string = '1-2,3-4,6-9,12-20,22-30'
>> map(lambda x: range(*x) + [x[-1]], map(tuple, [[int(y) for y in x.split('-')] for x in string.split(',')]))
>> [[1, 2], [3, 4], [6, 7, 8, 9], [12, 13, 14, 15, 16, 17, 18, 19, 20], [22, 23, 24, 25, 26, 27, 28, 29, 30]]
[range(*z) + [z[-1]] for z in map(tuple, [[int(y) for y in x.split('-')] for x in string.split(',')])]
Отредактировано (Янв. 29, 2010 19:55:54)
Офлайн
ZubchickСильно описал!Дальше сам, мой мозг сломлен -_-'>> string = '1-6,8-23,25-26'
>> [range(*z) + [z[-1]] for z in [tuple(y) for y in [[int(y) for y in x.split('-')] for x in string.split(',')]]]
>>[[1, 2, 3, 4, 5, 6], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], [25, 26]]
upd или та , на пару символов короче…>> string = '1-2,3-4,6-9,12-20,22-30'
>> map(lambda x: range(*x) + [x[-1]], map(tuple, [[int(y) for y in x.split('-')] for x in string.split(',')]))
>> [[1, 2], [3, 4], [6, 7, 8, 9], [12, 13, 14, 15, 16, 17, 18, 19, 20], [22, 23, 24, 25, 26, 27, 28, 29, 30]]
Офлайн
кароче я так и не придумал как развернуть в один список, чтобы записать все это в строчку. Но думаю ты справишься с остальным записав 2 вложенных цикла…
Upd Еще можно сэкономить 1н символ заменив 'z' на 'z'
Отредактировано (Янв. 29, 2010 20:20:45)
Офлайн
Задача стоит в экономии символов?
А то в лоб гораздо менее страшно получается:
s = '1-6,8-23,25-26'
result = []
for p in s.split(','):
sp = map(int, p.split('-'))
result.extend(range(sp[0], sp[1]+1))
print ','.join(map(str, result))
Офлайн
конечно менее страшно и даже не напряжно)
Просто у меня тут рядом книжка по схиму открыта… В общем я отлично размял мозг!
Отредактировано (Янв. 29, 2010 20:38:39)
Офлайн
Но задачу-то не решили.
Вот вам однострочник страшный, решающий ее:
print ','.join(map(str, sum(map(lambda t:range(t[0], t[1]+1), [map(int, p.split('-')) for p in s.split(',')]), [])))
Офлайн
Экономия символов :)
','.join(map(str, eval(re.sub(r'(\d+)-(\d+)', r'range(\1,\2+1)', re.sub(',', '+', s)))))
Офлайн
ну я пока тока учусь, до вас мне еще далеко :D (собстна и отвечаю тока в теме для новичков, потому что лучший способ научиться чему-либо, это что-либо объяснять)
Отредактировано (Янв. 29, 2010 21:02:49)
Офлайн
Это не Лисп все-таки, поэтому такие выкрутасы никому не нужны по большому счету. Символов на всех хватает :)
Отредактировано (Янв. 29, 2010 21:06:19)
Офлайн
EdEd, Привет! Ты всегда выручаешь, большое человеческое спасибо!
Это не Лисп все-таки, поэтому такие выкрутасы никому не нужны по большому счету. Символов на всех хватает :)
Офлайн