【发布时间】:2013-01-06 02:24:36
【问题描述】:
只要说我在 Python 中有一个整数,例如:100。
我想把这个整数转换成一个计数到这个整数的列表,例如:[1,2,3,... 100]
最有效的方法是什么?
(如果您想知道我为什么要这样做,那是因为我要使用的 Django Paginate 库需要一个列表——如果有更优雅的方式来使用 Paginate 而无需这样做,请告诉我) .
【问题讨论】:
标签: python django django-pagination
只要说我在 Python 中有一个整数,例如:100。
我想把这个整数转换成一个计数到这个整数的列表,例如:[1,2,3,... 100]
最有效的方法是什么?
(如果您想知道我为什么要这样做,那是因为我要使用的 Django Paginate 库需要一个列表——如果有更优雅的方式来使用 Paginate 而无需这样做,请告诉我) .
【问题讨论】:
标签: python django django-pagination
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() 来实现。
【讨论】:
Lattyware 给出的解决方案对于生成列表是正确的,但是如果您使用 Django 分页,您可以使用paginator_instance.page_range
https://docs.djangoproject.com/en/dev/topics/pagination/#django.core.paginator.Paginator.page_range
【讨论】:
您可以使用 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() 只是为了让它再次成为一个列表?
list(xrange(...) 到 range(...)。
list(range(1,101)) 的重点是在您实际需要列表的情况下兼容 python2.x 和 python3.x。
2to3 实际上没有正确转换。也许它是固执或愚蠢,但只要有可能,只要它不会对我的程序的性能产生太大影响,我会尝试在同一个源文件中支持 python2 和 python3 而不依赖外部工具。 (通常并不难)。