我试图做一个列表与数字1-1000在其中。显然,这将是令人讨厌的写/读,所以我试图使一个范围内的列表。在Python 2中,似乎:
1-1000
some_list = range(1,1000)
可以工作,但在Python 3中,范围类似于Python 2的xrange ?
xrange
有人能对此提供一些见解吗?
你真的不应该在列表中使用数字1-1000。但如果出于某种原因,你确实需要这些数字,那么你可以这样做:
[i for i in range(1, 1001)]
概括地列出理解:
上述列表的理解转化为:
nums = [] for i in range(1, 1001): nums.append(i)
这只是2.x中的列表理解语法。我知道这将在python 3中工作,但我不确定是否有一个升级的语法
Range开始包括第一个参数;但结束Up To, 不包括第二个参数(当提供2个参数;如果省略了第一个参数,它将从'0'开始)
range(start, end+1) [start, start+1, .., end]
你可以从range对象中构造一个列表:
my_list = list(range(1, 1001))
这是在python2中使用生成器的方法。X也是。通常来说,你可能不需要一个列表,因为你可以更有效地获得my_list[i]的值(i + 1),如果你只是需要迭代它,你可以回到range。
my_list[i]
i + 1
range
还要注意在python2上。x, xrange仍然是可索引的__abc2。这意味着python3上的range。x也有相同的属性__abc3
<一口> 1print xrange(30)[12]适用于python2.x
print xrange(30)[12]
__abc1在python3中与1类似的语句。 . x是print(range(30)[12]),同样有效
print(range(30)[12])
实际上,如果你想要1-1000(包括),使用带有参数1和1001的range(...)函数:range(1, 1001),因为range(start, end)函数从start到(end-1),包括。
range(...)
range(1, 1001)
range(start, end)
在Python 3中。x, range()函数有自己的类型。在这种情况下,你必须使用迭代器
range()
list(range(1000))
在Pythons <= 3.4中,你可以像其他人建议的那样,使用list(range(10))来从一个范围(通常是任何可迭代对象)中创建一个列表。
list(range(10))
在Python 3.5中引入的另一种方法是在列表文字[]中使用*:
3.5
[]
*
>>> r = range(10) >>> l = [*r] >>> print(l) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
虽然这相当于list(r),但它是字面语法,而且不涉及函数调用的事实确实让它执行得更快。它也更少的字符,如果你需要编码高尔夫:-)
list(r)
事实上,与Python2相比,这是Python3的倒退。当然,使用range()和xrange()的Python2比分别使用list(range())和range()的Python3更方便。原因是Python3的原始设计者不是很有经验,他们只考虑了许多初学者使用range函数来迭代大量的元素,这样内存和CPU效率都很低;但是他们忽略了使用range函数来生成数字列表。现在,他们要改变已经太迟了。
如果我是Python3的设计者,我会:
这应该是最优的。
在Python 3中使用范围。
下面是一个示例函数,返回两个数字之间的数字
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]
Python3缺少直接获取远程列表的函数的原因是,最初的Python3设计者在Python2方面是新手。他只考虑在for循环中使用range()函数,因此,列表永远不需要扩展。事实上,我们经常需要使用range()函数来生成一个列表并传递给一个函数。
因此,在这种情况下,Python3比Python2更不方便,因为:
xrange()
list(range())
尽管如此,你仍然可以这样使用列表展开:
[*range(N)]
Python 3:
my_list = [*range(1001)]