由于range对象按需生成值,是否意味着无论何时索引范围,迭代协议都会被调用到该索引?
我的意思是:
>>> R = range(1,11)
>>> print(R[5])
6
Run Code Online (Sandbox Code Playgroud)
既然R[5]没有存储在内存中,是否每次都通过创建一个新的迭代器来计算?如果没有,如何索引范围对象?
我刚刚开始学习Python,我很好奇:
为什么 python 可以for快速计算某些函数(例如循环),但不能快速计算某些函数(例如 )print?
我有以下功能:
def foo(length, num):
return num in range(length)
Run Code Online (Sandbox Code Playgroud)
这个函数的时间复杂度是多少?注意到range()在 Python 3 上创建 Range 对象,这个函数的时间复杂度是 O(1) 还是 O(N)?
想知道各种 Python 版本之间的时间复杂度是否也存在差异(2 对 3)。
除非我弄错了,否则范围只能包含唯一的数字.所以,一个数字可能在或不在.
我想只有当我们想要将一个范围作为许多可接受类型之一(动态)传递给某个函数时才有意义.
然而,似乎如果它会超过整个范围来计算一个数字,那将是非常低效的.
我尝试将它与" in" 进行比较,但在我的机器上看起来它们的时间相同.那可能是对的吗?
这里是Python的新手。我正在使用Python 3处理CodeAbbey的问题,并且希望获得帮助以缩短用户输入的代码。
假设我想从用户那里获得此输入:
3
2 3
4 5
6 7
Run Code Online (Sandbox Code Playgroud)
第一行是案例数,接下来的每一行都是案例本身,带有2个参数。到目前为止,我已经想出了这样做的方法:
N=int(input('How many cases will you calculate?\n'))
print('Input parameters separated by spaces:')
entr = [list(int(x) for x in input().split()) for i in range(N)]
Run Code Online (Sandbox Code Playgroud)
问题是我宁愿询问列表理解中的所有输入,然后分配N = entr [0]。但是,如何在不使用range(N)的情况下使列表理解将输入分成几行?
我试过了:
entr = [list(int(x) for x in input().split()) for x in input()]
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
p1 = (0, 10, 1)
p2 = (0, -20, -2)
p3 = (0,10,2)
Run Code Online (Sandbox Code Playgroud)
嗨,
我有上面的代码,我只想快速计算每个范围内有多少项而不迭代它?(它是一些嵌套循环的一部分).所以p1会返回9.
还有更好的方法将这些变量传递给范围函数吗?
现在我起诉:
range(p1[0], p1[1], p1[2])
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过计算整数的超大幂来打印非常大的数字。尽管我的代码是正确的,但我没有观察到所需的输出。
通常,python解释器可以打印非常大的整数,与系统内存支持的一样大。考虑到这一假设,下面是我正在运行的代码。
a = int(input())
b = int(input())
c = int(input())
d = int(input())
import math
if a in range(1,1001):
if b in range(1,1001):
if c in range(1,1001):
if d in range(1,1001):
print((math.pow(a,b)+math.pow(c,d)))
Run Code Online (Sandbox Code Playgroud)
我正在观察的输出是
4710194409608608302099333120
Run Code Online (Sandbox Code Playgroud)
预期的输出是
4710194409608608369201743232
Run Code Online (Sandbox Code Playgroud)
您能为我提供解决方法的指示吗?输入值为:
a = 9
b = 29
c = 7
d = 27
Run Code Online (Sandbox Code Playgroud) 我想检查介于l和h之间的m.我可以写
if m<=h and m>=l
Run Code Online (Sandbox Code Playgroud)
要么
m in range(l,h+1)
Run Code Online (Sandbox Code Playgroud)
后者看起来更好,但是它需要超过O(1)时间吗?
因此,如果我想比较Python中的数字,例如,检查数字是否落在2到100的范围内。
以下哪种方法最可取,为什么?
使用比较运算符?
if(n>=2 and n<=100):
print("Okay")
Run Code Online (Sandbox Code Playgroud)
或使用range()函数?
if(n in range(2,101)):
print("Okay")
Run Code Online (Sandbox Code Playgroud)
如果比较非常大,您的答案也会改变吗?
使用r = range(1500, 2500),我x in r对x低于/在/高于范围进行了基准测试:
1000 in r : 58 ns \xc2\xb1 0 ns\n2000 in r : 101 ns \xc2\xb1 1 ns\n3000 in r : 58 ns \xc2\xb1 0 ns\nRun Code Online (Sandbox Code Playgroud)\n检查1000比检查2000快?这是有道理的,对于 1000,Python 仅在检查范围的下限后就知道结果,而对于 2000,它需要检查两个边界。
\n检查3000比检查2000快?这是有道理的,对于 3000,Python 仅在检查范围的上限后就知道结果,而对于 2000,它需要检查两个边界。
\n嘿...等一下...
\n它如何知道首先检查哪个边界?1000和3000怎么能比2000检查得快呢?
\n基准代码(在线尝试!):
\nfrom timeit import repeat\nfrom statistics import mean, stdev\n\nsetup = \'r = range(1500, 2500)\'\n\nn …Run Code Online (Sandbox Code Playgroud) python ×10
python-3.x ×6
range ×4
performance ×2
64-bit ×1
algorithm ×1
for-loop ×1
indexing ×1
input ×1
int ×1
multiline ×1
python-2.7 ×1
recursion ×1