相关疑难解决方法(0)

索引范围对象时是否使用迭代协议?

由于range对象按需生成值,是否意味着无论何时索引范围,迭代协议都会被调用到该索引?

我的意思是:

>>> R = range(1,11)
>>> print(R[5])
6
Run Code Online (Sandbox Code Playgroud)

既然R[5]没有存储在内存中,是否每次都通过创建一个新的迭代器来计算?如果没有,如何索引范围对象?

python indexing python-3.x python-internals

5
推荐指数
1
解决办法
119
查看次数

python 是如何如此快地计算某些指令的呢?

我刚刚开始学习Python,我很好奇:

为什么 python 可以for快速计算某些函数(例如循环),但不能快速计算某些函数(例如 )print

python recursion performance for-loop

5
推荐指数
1
解决办法
296
查看次数

范围()上的Python“in”运算符时间复杂度

我有以下功能:

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)。

python algorithm range python-2.7 python-3.x

4
推荐指数
1
解决办法
2733
查看次数

为什么范围具有"计数"功能?

除非我弄错了,否则范围只能包含唯一的数字.所以,一个数字可能在或不在.

我想只有当我们想要将一个范围作为许多可接受类型之一(动态)传递给某个函数时才有意义.

然而,似乎如果它会超过整个范围来计算一个数字,那将是非常低效的.

我尝试将它与" in" 进行比较,但在我的机器上看起来它们的时间相同.那可能是对的吗?

python range

3
推荐指数
1
解决办法
425
查看次数

Python 3中具有列表理解功能的多行用户输入

这里是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)

但这不起作用。

python list-comprehension input multiline python-3.x

3
推荐指数
1
解决办法
4935
查看次数

计算范围内的项目

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 range python-3.x

3
推荐指数
1
解决办法
61
查看次数

在python中打印一个非常大的整数

我正在尝试通过计算整数的超大幂来打印非常大的数字。尽管我的代码是正确的,但我没有观察到所需的输出。

通常,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)

python int 64-bit python-3.x

3
推荐指数
2
解决办法
71
查看次数

检查范围内的某些东西的运行时

我想检查介于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
推荐指数
1
解决办法
58
查看次数

哪一种是比较Python中数字的更好方法?又为什么呢?

因此,如果我想比较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)

如果比较非常大,您的答案也会改变吗?

python python-3.x

1
推荐指数
1
解决办法
70
查看次数

`x in range(...)` 检查的奇怪速度

使用r = range(1500, 2500),我x in rx低于/在/高于范围进行了基准测试:

\n
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\n
Run Code Online (Sandbox Code Playgroud)\n

检查1000比检查2000快?这是有道理的,对于 1000,Python 仅在检查范围的下限后就知道结果而对于 2000,它需要检查两个边界。

\n

检查3000比检查2000快?这是有道理的,对于 3000,Python 仅在检查范围的上限后就知道结果而对于 2000,它需要检查两个边界。

\n

嘿...等一下...

\n

它如何知道首先检查哪个边界?1000和3000怎么能2000检查得快呢?

\n

基准代码(在线尝试!):

\n
from timeit import repeat\nfrom statistics import mean, stdev\n\nsetup = \'r = range(1500, 2500)\'\n\nn …
Run Code Online (Sandbox Code Playgroud)

python performance range

0
推荐指数
1
解决办法
126
查看次数