Группировки последовательных чисел в диапазоны в Python 3.2; третьей версии (можно номера страниц как несортированный набор)


def range_find(pageset):

    pagerangelist=[]

    for page in list(pageset):

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

    pagerangestringlist=[]

    for pagerange in pagerangelist:

        if len(pagerange)==1:pagerangestringlist.append(str(pagerange[0]))
        else: pagerangestringlist.append(str(pagerange[0])+'-'+str(pagerange[-1]))      

    return ','.join(pagerangestringlist)


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

def range_find(pageset):

pagerangelist=[]

for page in list(pageset):

Нет смысла в listifying набор просто перебрать его. Я думаю, что вы имели в виду на страницу в отсортированном(pageset) , чтобы получить доступ к странице в отсортированном порядке.

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

Вы все еще делаете это трудно читать, поставив тех на одной линии.

    pagerangestringlist=[]

Если у вас есть несколько слов, я предлагаю под очков. Я также предлагаю опуская типов, таких как список/набор с вашими именами. Я бы назвал это page_range_strings.

    for pagerange in pagerangelist:

if len(pagerange)==1:pagerangestringlist.append(str(pagerange[0]))
else: pagerangestringlist.append(str(pagerange[0])+'-'+str(pagerange[-1]))

Я рекомендую использовать строку форматирования. Это будет легче читать потом конкатенации строк.

    return ','.join(pagerangestringlist)

1
ответ дан 8 октября 2011 в 12:10 Источник Поделиться