диапазон страниц для алгоритма печати - PullRequest
2 голосов
/ 22 ноября 2010

В некоторых диалоговых окнах печати вы можете указать, какие страницы (и диапазоны страниц) вы хотите распечатать.

1-10, 3, 4, 23-47

Есть ли рецепт / алгоритм для этого уже там?

Ответы [ 3 ]

6 голосов
/ 22 ноября 2010
def parse_range(astr):
    result=set()
    for part in astr.split(','):
        x=part.split('-')
        result.update(range(int(x[0]),int(x[-1])+1))
    return sorted(result)

print(parse_range('1-10, 3, 4, 23-47'))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]
2 голосов
/ 31 мая 2014

Это было несколько лет спустя, но я создал пакет python, который предоставляет объект PageRange. На github на https://github.com/taylorzr/PageRange, и на pypi на https://pypi.python.org/pypi/PageRange/:

pip install PageRange

Использование:

from pagerange import PageRange

page_range = PageRange("1-10, 3, 4, 23-47") #-> PageRange("1-10,23-47")
page_range.range #-> "1-10,23-47"
page_range.pages #-> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]

page_range.add_page(48)
page_range.range #-> "1-10,23-47"
0 голосов
/ 22 ноября 2010

Вы ищете это?

outer= text.split(",")
dashes= [ x.partition('-') for x in outer ]
ranges= [ (x,z) if y == '-' else (x,x) for x,y,z in dashes ]
[ (int(x),int(y)) for x,y in ranges ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...