Группировки последовательных чисел в диапазоны в Python 3.2 : новую версию установить


def range_find(pageset,upperlimit=1000):

    pagerangelist=[]

    for page in range(0,upperlimit):

        if page in pageset and previouspage in pageset:pagerangelist[-1].append(page)
        elif page in pageset and not (previouspage in pageset):pagerangelist.append([page])
        else: pass

        previouspage=page

    pagerangestringlist=[]

    for pagerange in pagerangelist:

        pagerangestringlist.append(str(pagerange[0])+('-'+str(pagerange[-1]))*((len(pagerange)-1)>0))


    return(','.join(pagerangestringlist))


print(range_find({1,2,5,7,8,11,19,25,29,30,31,39,40,41,42,43,44,56,57,59,60,70,71,72,100,101,103,104,105}))


207
1
задан 7 октября 2011 в 03:10 Источник Поделиться
Комментарии
1 ответ

def range_find(pageset,upperlimit=1000):

pagerangelist=[]

for page in range(0,upperlimit):

Нет оснований для включения 0. Почему бы вам не посчитать верхняя граница Макса(pageset)?

        if page in pageset and previouspage in pageset:pagerangelist[-1].append(page)
elif page in pageset and not (previouspage in pageset):pagerangelist.append([page])
else: pass

Не хлюпать все это на одной линии. Это делает это тяжелее, чтобы читать. Имея еще: случае пропуска бесполезно

        previouspage=page

Поскольку вы рассчитываете, просто страница - 1 вместо previouspage

    pagerangestringlist=[]

for pagerange in pagerangelist:

pagerangestringlist.append(str(pagerange[0])+('-'+str(pagerange[-1]))*((len(pagerange)-1)>0))

Слишком умным. Просто использовать, если. Эта техника делает это тяжелее, чтобы видеть, что происходит. Также бессмысленно лишние скобки.

    return(','.join(pagerangestringlist))

Не ставьте скобки вокруг вашего оператора return выражение.

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

range_find({1, 2, 1000000},100000000)

Предстоит провести долгое время сбивания сквозь страницы, которые не очень интересны.

2
ответ дан 7 октября 2011 в 04:10 Источник Поделиться