代码之家  ›  专栏  ›  技术社区  ›  jedierikb grijalvaromero

打印算法的页面范围

  •  2
  • jedierikb grijalvaromero  · 技术社区  · 15 年前

    某些打印对话框提供了一个选项,用于指定要打印的页面(和页面范围)。

    1-10, 3, 4, 23-47
    

    有没有现成的方法/算法?

    3 回复  |  直到 15 年前
        1
  •  6
  •   unutbu    15 年前
    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
  •  2
  •   Zach    12 年前

    几年后,我做了一个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"
    
        3
  •  -1
  •   S.Lott    15 年前

    你在找这个吗?

    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 ]