Найти - Пользователи
Полная версия: Чтение всех файлов
Начало » Python для новичков » Чтение всех файлов
1 2 3 4
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]]
Дальше сам, мой мозг сломлен -_-'

upd1 или та , на пару символов короче…
>> 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]]
upd2
и еще чуть короче…
[range(*z) + [z[-1]] for z in map(tuple, [[int(y) for y in x.split('-')] for x in string.split(',')])]
avdoshkin
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]]
Сильно описал!
Zubchick
кароче я так и не придумал как развернуть в один список, чтобы записать все это в строчку. Но думаю ты справишься с остальным записав 2 вложенных цикла…

Upd Еще можно сэкономить 1н символ заменив 'z' на 'z'
Ed
Задача стоит в экономии символов?
А то в лоб гораздо менее страшно получается:
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))
Zubchick
конечно менее страшно и даже не напряжно)
Просто у меня тут рядом книжка по схиму открыта… В общем я отлично размял мозг!
Ed
Но задачу-то не решили.
Вот вам однострочник страшный, решающий ее:
print ','.join(map(str, sum(map(lambda t:range(t[0], t[1]+1), [map(int, p.split('-')) for p in s.split(',')]), [])))
Ed
Экономия символов :)
','.join(map(str, eval(re.sub(r'(\d+)-(\d+)', r'range(\1,\2+1)', re.sub(',', '+', s)))))
Zubchick
ну я пока тока учусь, до вас мне еще далеко :D (собстна и отвечаю тока в теме для новичков, потому что лучший способ научиться чему-либо, это что-либо объяснять)
Ed
Это не Лисп все-таки, поэтому такие выкрутасы никому не нужны по большому счету. Символов на всех хватает :)
avdoshkin
Ed
Это не Лисп все-таки, поэтому такие выкрутасы никому не нужны по большому счету. Символов на всех хватает :)
Ed, Привет! Ты всегда выручаешь, большое человеческое спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB