标签: range

为什么Python 3中的"1000000000000000在范围内(1000000000000001)"如此之快?

据我所知,该range()函数实际上是Python 3中的一个对象类型,它可以动态生成其内容,类似于生成器.

在这种情况下,我预计下面的行会花费大量的时间,因为为了确定1千万亿是否在该范围内,必须生成一个千万亿的值:

1000000000000000 in range(1000000000000001)
Run Code Online (Sandbox Code Playgroud)

此外:似乎无论我添加多少个零,计算或多或少都需要相同的时间(基本上是瞬时的).

我也试过这样的事情,但计算仍然几乎是即时的:

1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens
Run Code Online (Sandbox Code Playgroud)

如果我尝试实现自己的范围功能,结果就不那么好了!!

def my_crappy_range(N):
    i = 0
    while i < N:
        yield i
        i += 1
    return
Run Code Online (Sandbox Code Playgroud)

range()在引擎盖下做的对象是什么让它如此之快?


选择Martijn Pieters的答案是因为它的完整性,但也看到了abarnert的第一个答案,可以很好地讨论在Python 3中range成为一个完整的序列意味着什么,以及关于__contains__Python实现中函数优化的潜在不一致的一些信息/警告.abarnert的另一个答案更详细,并为那些对Python 3中的优化背后的历史感兴趣的人提供了链接(并且缺乏xrangePython 2中的优化).pokewim的答案感兴趣的人提供了相关的C源代码和解释.

python performance range python-3.x python-internals

1890
推荐指数
11
解决办法
18万
查看次数

如何检查字符串是否包含Objective-C中的另一个字符串?

如何检查string(NSString)是否包含另一个较小的字符串?

我希望有类似的东西:

NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
Run Code Online (Sandbox Code Playgroud)

但我能找到的最接近的是:

if ([string rangeOfString:@"hello"] == 0) {
    NSLog(@"sub string doesnt exist");
} 
else {
    NSLog(@"exists");
}
Run Code Online (Sandbox Code Playgroud)

无论如何,这是查找字符串是否包含另一个字符串的最佳方法吗?

string substring objective-c range ios

1200
推荐指数
13
解决办法
54万
查看次数

Python 2.X中range和xrange函数有什么区别?

显然xrange更快但我不知道为什么它更快(除了轶事到目前为止没有证据表明它更快)或者除此之外还有什么不同

for i in range(0, 20):
for i in xrange(0, 20):
Run Code Online (Sandbox Code Playgroud)

python loops range xrange python-2.x

690
推荐指数
15
解决办法
36万
查看次数

如何使用小数范围()步长值?

有没有办法介于0和1之间0.1?

我以为我可以像下面这样做,但它失败了:

for i in range(0, 1, 0.1):
    print i
Run Code Online (Sandbox Code Playgroud)

相反,它说步骤参数不能为零,这是我没想到的.

python floating-point range

679
推荐指数
17
解决办法
70万
查看次数

455
推荐指数
7
解决办法
21万
查看次数

String子串如何在Swift中工作

我一直在使用Swift 3更新我的一些旧代码和答案但是当我使用子字符串获取Swift字符串和索引时,事情变得令人困惑.

具体来说,我尝试以下方法:

let str = "Hello, playground"
let prefixRange = str.startIndex..<str.startIndex.advancedBy(5)
let prefix = str.substringWithRange(prefixRange)
Run Code Online (Sandbox Code Playgroud)

第二行给我以下错误

'String'类型的值没有成员'substringWithRange'

我看到现在String确实有以下方法:

str.substring(to: String.Index)
str.substring(from: String.Index)
str.substring(with: Range<String.Index>)
Run Code Online (Sandbox Code Playgroud)

起初这些让我很困惑,所以我开始玩索引和范围.这是子串的后续问题和答案.我在下面添加一个答案来说明它们是如何使用的.

string substring range swift

316
推荐指数
14
解决办法
27万
查看次数

为什么范围(开始,结束)不包括结束?

>>> range(1,11)
Run Code Online (Sandbox Code Playgroud)

给你

[1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

为什么不1-11?

他们是否只是随意决定这样做,或者它是否具有一些我没有看到的价值?

python range

280
推荐指数
9
解决办法
27万
查看次数

从向量中提取子向量的最佳方法?

假设我有一个std::vector(让我们称之为myVec)大小N.构造由元素X到Y的副本组成的新向量的最简单方法是什么,其中0 <= X <= Y <= N-1?例如,myVec [100000]通过myVec [100999]大小的向量150000.

如果使用向量无法有效地完成此操作,是否应该使用另一种STL数据类型?

c++ stl vector range

274
推荐指数
8
解决办法
29万
查看次数

Python,Matplotlib,subplot:如何设置轴范围?

如何将第二个子图的y轴范围设置为例如[0,1000]?我的数据(文本文件中的一列)的FFT图导致(inf.?)峰值,因此实际数据不可见.

pylab.ylim([0,1000])
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有任何效果.这是整个脚本:

# based on http://www.swharden.com/blog/2009-01-21-signal-filtering-with-python/
import numpy, scipy, pylab, random

xs = []
rawsignal = []
with open("test.dat", 'r') as f:
      for line in f:
            if line[0] != '#' and len(line) > 0:
                xs.append( int( line.split()[0] ) )
                rawsignal.append( int( line.split()[1] ) )

h, w = 3, 1
pylab.figure(figsize=(12,9))
pylab.subplots_adjust(hspace=.7)

pylab.subplot(h,w,1)
pylab.title("Signal")
pylab.plot(xs,rawsignal)

pylab.subplot(h,w,2)
pylab.title("FFT")
fft = scipy.fft(rawsignal)
#~ pylab.axis([None,None,0,1000])
pylab.ylim([0,1000])
pylab.plot(abs(fft))

pylab.savefig("SIG.png",dpi=200)
pylab.show()
Run Code Online (Sandbox Code Playgroud)

其他改进也值得赞赏!

python axis matplotlib range

258
推荐指数
3
解决办法
68万
查看次数

NameError:全局名称'xrange'未在Python 3中定义

我在运行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)

游戏来自这里.

是什么导致这个错误?

python range xrange python-3.x runtimeexception

253
推荐指数
5
解决办法
31万
查看次数