Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 29, 2010 19:34:30

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение всех файлов

>> 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(',')])]



Отредактировано (Янв. 29, 2010 19:55:54)

Офлайн

#2 Янв. 29, 2010 19:56:35

avdoshkin
От:
Зарегистрирован: 2009-08-08
Сообщения: 93
Репутация: +  -1  -
Профиль   Отправить e-mail  

Чтение всех файлов

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]]
Сильно описал!



Офлайн

#3 Янв. 29, 2010 20:10:10

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение всех файлов

кароче я так и не придумал как развернуть в один список, чтобы записать все это в строчку. Но думаю ты справишься с остальным записав 2 вложенных цикла…

Upd Еще можно сэкономить 1н символ заменив 'z' на 'z'



Отредактировано (Янв. 29, 2010 20:20:45)

Офлайн

#4 Янв. 29, 2010 20:27:47

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

Задача стоит в экономии символов?
А то в лоб гораздо менее страшно получается:

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))



Офлайн

#5 Янв. 29, 2010 20:37:36

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение всех файлов

конечно менее страшно и даже не напряжно)
Просто у меня тут рядом книжка по схиму открыта… В общем я отлично размял мозг!



Отредактировано (Янв. 29, 2010 20:38:39)

Офлайн

#6 Янв. 29, 2010 20:41:01

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

Но задачу-то не решили.
Вот вам однострочник страшный, решающий ее:

print ','.join(map(str, sum(map(lambda t:range(t[0], t[1]+1), [map(int, p.split('-')) for p in s.split(',')]), [])))



Офлайн

#7 Янв. 29, 2010 20:55:47

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

Экономия символов :)

','.join(map(str, eval(re.sub(r'(\d+)-(\d+)', r'range(\1,\2+1)', re.sub(',', '+', s)))))



Офлайн

#8 Янв. 29, 2010 20:59:57

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение всех файлов

ну я пока тока учусь, до вас мне еще далеко :D (собстна и отвечаю тока в теме для новичков, потому что лучший способ научиться чему-либо, это что-либо объяснять)



Отредактировано (Янв. 29, 2010 21:02:49)

Офлайн

#9 Янв. 29, 2010 21:05:29

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение всех файлов

Это не Лисп все-таки, поэтому такие выкрутасы никому не нужны по большому счету. Символов на всех хватает :)



Отредактировано (Янв. 29, 2010 21:06:19)

Офлайн

#10 Янв. 30, 2010 13:53:59

avdoshkin
От:
Зарегистрирован: 2009-08-08
Сообщения: 93
Репутация: +  -1  -
Профиль   Отправить e-mail  

Чтение всех файлов

Ed
Это не Лисп все-таки, поэтому такие выкрутасы никому не нужны по большому счету. Символов на всех хватает :)
Ed, Привет! Ты всегда выручаешь, большое человеческое спасибо!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version