我想要创建一个包含数字 1-1000
的列表。显然这样写/读起来很烦人,因此我尝试使用范围(range)创建列表。在 Python 2 中,似乎可以这样实现:
some_list = range(1,1000)
这可能在Python 2中有效,但在Python 3中,range
类似于Python 2中的xrange
?
有人能提供一些见解吗?
我想要创建一个包含数字 1-1000
的列表。显然这样写/读起来很烦人,因此我尝试使用范围(range)创建列表。在 Python 2 中,似乎可以这样实现:
some_list = range(1,1000)
这可能在Python 2中有效,但在Python 3中,range
类似于Python 2中的xrange
?
有人能提供一些见解吗?
你可以从range对象中构建一个列表:
my_list = list(range(1, 1001))
这是在Python2.x中使用生成器的方法。通常情况下,您可能不需要列表,因为可以更高效地获取my_list[i]
的值(i+1
),如果只需要迭代它,可以退回到range
。xrange
仍然可以被索引1。这意味着Python3.x上的range
也具有相同的属性2。
1print xrange(30)[12]
对于Python2.x有效。
2类似于Python3.x中1的语句是print(range(30)[12])
,这也有效。list(arg)
被理解为调用list
类的构造函数。实际上,在Python中也是如此。关于对象是否在构造期间填充(如C++中的情况)或仅在第一个自动调用的方法(如Python的__init __()
方法)中填充的争论不能改变基本的抽象概念。我的观点是列表构造函数接受迭代器并使用返回的值填充列表。 - pepr__init__
被调用。(来自__new__
文档{http://docs.python.org/reference/datamodel.html#object.__new__})“如果__new__()不返回cls的实例,则新实例的__init__()方法将不会被调用。” - mgilson'range' object is not callable
。原因是在Jupyter Notebook中的某个代码单元中使用了名为range的变量或函数,导致Python解释器将其解析为一个范围对象(range object),而不是内置的range函数。然而,在shell中可能没有定义这样的变量或函数,所以代码可以正常工作。要解决这个问题,可以尝试使用其他名称来代替这个变量或函数。 - subtleseekernp.nan
添加到这个列表中? - xarenalist
或 range
。 - user2357112list(range(10))
来将范围(一般地,任何可迭代对象)转换为列表。*
:>>> r = range(10)
>>> l = [*r]
>>> print(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
虽然这与 list(r)
等价,但它是字面语法,没有涉及任何函数调用,因此可以更快地执行。如果你需要编写高效的代码,这也会更短。
[*range(10)]
适用于当您不需要range
以外的任何目的来初始化list
的情况。 旁注:我最喜欢(好吧,不是真的)的展开概述的部分是空集现在具有文字语法,{*()}
,或者正如我所称之为单眼猴运算符。;-) - ShadowRangerrange()
函数有自己的类型。因此,在这种情况下,您必须使用迭代器。
list(range(1000))
list(range(1000))()
。 - wjandrea你真的不应该在列表中使用数字1-1000。但如果出于某些原因你确实需要这些数字,那么你可以这样做:
[i for i in range(1, 1001)]
简而言之,列表推导式:
上述列表推导式等同于:
nums = []
for i in range(1, 1001):
nums.append(i)
这只是列表推导式的语法,来自2.x。我知道这在Python 3中有效,但不确定是否有升级的语法。
范围从第一个参数开始包含; 但在第二个参数(当提供2个参数时)之前结束,不包括第二个参数(如果省略第一个参数,则从'0'开始)
range(start, end+1)
[start, start+1, .., end]
list(range(1000))
。 - Rik Poggilist()
构造函数。当给定任何可迭代对象时,list()
构造函数知道如何创建一个新的列表。 - Greg Hewgilllist(range(1000))
可以像在Python2中使用list(xrange(1000))
一样工作。 - Rik Poggi[*range(N)]
range
本身在几乎所有方面都像一个不可变序列,有时甚至更加高效(例如,对于int
的包含测试是 O(1)
,而对于list
则是O(n)
)。在Python 2中,人们倾向于默认使用range
,即使xrange
几乎总是更好的选择;在Python 3中,您必须明确选择list
,而不能通过使用错误名称来无意中获得它。 - ShadowRangerPython 3:
my_list = [*range(1001)]
实际上,如果您想要1-1000(包括),请使用参数为1和1001的range(...)
函数:range(1, 1001)
,因为range(start, end)
函数从开始到(结束-1)。
在Python 3中,请使用Range。
下面是一个示例函数,用于返回两个数字之间的数字
def get_between_numbers(a, b):
"""
This function will return in between numbers from two numbers.
:param a:
:param b:
:return:
"""
x = []
if b < a:
x.extend(range(b, a))
x.append(a)
else:
x.extend(range(a, b))
x.append(b)
return x
结果
print(get_between_numbers(5, 9))
print(get_between_numbers(9, 5))
[5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
some_list[i] == i+1
,所以你可能根本不需要一个列表。 - njzk2