【问题标题】:Is there a way to convert integer to a list of integers counting upwards?有没有办法将整数转换为向上计数的整数列表?
【发布时间】:2013-01-06 02:24:36
【问题描述】:

只要说我在 Python 中有一个整数,例如:100。

我想把这个整数转换成一个计数到这个整数的列表,例如:[1,2,3,... 100]

最有效的方法是什么?

(如果您想知道我为什么要这样做,那是因为我要使用的 Django Paginate 库需要一个列表——如果有更优雅的方式来使用 Paginate 而无需这样做,请告诉我) .

【问题讨论】:

    标签: python django django-pagination


    【解决方案1】:

    Python range() built-in 完全符合您的要求。例如:

    range(1, 101)
    

    注意range()0算起,这在计算机科学中很正常,所以我们需要传递1,它一直计数到给定的值,不包括-因此101在这里算到@ 987654329@。所以一般来说,你希望range(1, n+1)1 计数到n

    还要注意,在 3.x 中,这会生成一个迭代器,而不是一个列表,因此如果您需要一个列表,那么您可以简单地将 list() 包裹在您对 range() 的调用周围。也就是说 - 大多数时候可以使用迭代器而不是列表(它有很大的优势,因为迭代器可以延迟计算),在这种情况下,不需要创建列表(在 2.x 中,功能像 3.x 中的 range 可以通过 xrange() 来实现。

    【讨论】:

      【解决方案2】:

      Lattyware 给出的解决方案对于生成列表是正确的,但是如果您使用 Django 分页,您可以使用paginator_instance.page_range

      https://docs.djangoproject.com/en/dev/topics/pagination/#django.core.paginator.Paginator.page_range

      【讨论】:

        【解决方案3】:

        您可以使用 range 或 xrange。 xrange 更快,但返回一个迭代器。

        >>>range(1,101)
        [1, 2, 3, ... , 99, 100]
        
        >>> xrange(1,101)
        xrange(1, 101)
        
        >>>list(xrange(1,101))
        [1, 2, 3, ... , 99, 100]
        

        【讨论】:

        • 为什么使用xrange() 只是为了让它再次成为一个列表?
        • 仅作为示例显示。也许更好的例子是“for a in xrange(1,101)”。
        • @frb 是的,但这种比较毫无意义。正确的比较是 list(xrange(...)range(...)
        • @Ophion --list(range(1,101)) 的重点是在您实际需要列表的情况下兼容 python2.x 和 python3.x。
        • @Lattyware -- 是的,我知道。但是我还有其他东西 2to3 实际上没有正确转换。也许它是固执或愚蠢,但只要有可能,只要它不会对我的程序的性能产生太大影响,我会尝试在同一个源文件中支持 python2 和 python3 而不依赖外部工具。 (通常并不难)。
        猜你喜欢
        • 2022-11-24
        • 2010-10-04
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 2013-04-23
        • 2016-02-04
        • 2021-12-08
        相关资源
        最近更新 更多