显然xrange更快但我不知道为什么它更快(除了轶事到目前为止没有证据表明它更快)或者除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
Run Code Online (Sandbox Code Playgroud) 最近我开始使用Python3,它缺乏xrange的伤害.
简单的例子:
1) Python2:
from time import time as t
def count():
st = t()
[x for x in xrange(10000000) if x%4 == 0]
et = t()
print et-st
count()
Run Code Online (Sandbox Code Playgroud)
2) Python3:
from time import time as t
def xrange(x):
return iter(range(x))
def count():
st = t()
[x for x in xrange(10000000) if x%4 == 0]
et = t()
print (et-st)
count()
Run Code Online (Sandbox Code Playgroud)
结果分别是:
1) 1.53888392448 2) 3.215819835662842
这是为什么?我的意思是,为什么xrange被删除了?这是一个很好的学习工具.对于初学者,就像我一样,就像我们所有人一样.为什么删除它?有人能指出我正确的PEP,我找不到它.
干杯.
我在运行python程序时遇到错误:
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 110, in <module>
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 27, in __init__
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\class\inventory.py", line 17, in __init__
builtins.NameError: global name 'xrange' is not defined
Run Code Online (Sandbox Code Playgroud)
游戏来自这里.
是什么导致这个错误?
这对我来说不时出现:我有一些C#代码非常想要range()Python中可用的功能.
我知道使用
for (int i = 0; i < 12; i++)
{
// add code here
}
Run Code Online (Sandbox Code Playgroud)
但是这会在功能用法中降低,就像我想要做一个Linq Sum()而不是写上面的循环一样.
有没有内置?我想我可以永远只是推出自己用yield还是这样,但是这将是如此得心应手,只是有.
我从大多数pythonic方法中遇到了这个代码,用于计算可迭代的匹配元素
r = xrange(1, 10)
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 3
Run Code Online (Sandbox Code Playgroud)
r迭代一次.然后它再次迭代.我想如果一个迭代器被消耗掉,那么它就结束了,它不应该再次迭代.
生成器表达式只能迭代一次:
r = (7 * i for i in xrange(1, 10))
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 0
Run Code Online (Sandbox Code Playgroud)
枚举(L):
r = enumerate(mylist) …Run Code Online (Sandbox Code Playgroud) 我想更改直方图的默认x范围.数据范围是7到12.但是,默认情况下,直方图从7开始,到13结束.我希望它从6.5开始,到12.5结束.但是,刻度应该从7到12.我该怎么做?
import asciitable
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import pylab
from pylab import xticks
data = asciitable.read(file)
hmag = data['col8']
visits = data['col14']
origin = data['col13']
n, bins, patches = plt.hist(hmag, 30, facecolor='gray', align='mid')
xticks(range(7,13))
pylab.rc("axes", linewidth=8.0)
pylab.rc("lines", markeredgewidth=2.0)
plt.xlabel('H mag', fontsize=14)
plt.ylabel('# of targets', fontsize=14)
pylab.xticks(fontsize=15)
pylab.yticks(fontsize=15)
plt.grid(True)
plt.savefig('hmag_histogram.eps', facecolor='w', edgecolor='w', format='eps')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我尝试执行以下代码但不能错误:未定义名称'xrange'
pages = (
requests.get(
build_group_request({
"offset": WINDOW_SIZE * i,
"count": WINDOW_SIZE,
"fields": "sex,interests,bdate"
})
).json()['response']['items']
for i in xrange(int(float(COUNT) / 100 + 1))
)
Run Code Online (Sandbox Code Playgroud) xrange 函数不适用于大整数:
>>> N = 10**100
>>> xrange(N)
Traceback (most recent call last):
...
OverflowError: long int too large to convert to int
>>> xrange(N, N+10)
Traceback (most recent call last):
...
OverflowError: long int too large to convert to int
Run Code Online (Sandbox Code Playgroud)
Python 3.x:
>>> N = 10**100
>>> r = range(N)
>>> r = range(N, N+10)
>>> len(r)
10
Run Code Online (Sandbox Code Playgroud)
range()Python 2.x 有py3k内置函数的后端吗?
我正在寻找一个完整的"懒惰"实现range(),而不只是部分实现它的一些功能.
当我遇到这个RangeGenerator页面时,我正在浏览Python Generators Wiki,该页面谈到irange() -
这将让我们迭代大量数字而不诉诸xrange,这是一个惰性列表而不是生成器.
我似乎无法理解该页面上描述的测试套件和实现.我知道range()在内存中创建一个列表(从Python 2.7的角度来看)并且xrange()是一个生成器.有irange()什么不同?
python ×10
xrange ×10
range ×7
python-3.x ×4
biginteger ×1
c# ×1
generator ×1
histogram ×1
iterator ×1
loops ×1
matplotlib ×1
pep ×1
python-2.x ×1