相关疑难解决方法(0)

为什么在CPython中`len(l)!= 0'比`bool(l)`快?

我正在做一些关于列表上的操作速度的实验。为此,我定义了两个列表:l_short = []l_long = list(range(10**7))

这个想法是bool(l)len(l) != 0

if比赛中,下面的实现是快了很多if l: pass,而不是if len(l) != 0: pass

但是没有if竞赛,我得到了以下结果:

%%timeit
len(l_long) != 0
# 59.8 ns ± 0.358 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%%timeit
bool(l_long)
# 63.3 ns ± 0.192 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Run Code Online (Sandbox Code Playgroud)

的时间bool稍长,为什么呢?

这是使用dis(FYI)的字节码

dis("len(l_long) != 0")
""" …
Run Code Online (Sandbox Code Playgroud)

python performance cpython python-3.x

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

在 Python 中的列表中创建列表

我有一个名为 values 的列表,其中包含一系列数字:

values = [0, 1, 2, 3, 4, 5, ... , 351, 0, 1, 2, 3, 4, 5, 6, ... , 750, 0, 1, 2, 3, 4, 5, ... , 559]
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列表,其中包含从 0 到一个数字的元素列表。

喜欢 :

new_values = [[0, 1, 2, ... , 351], [0, 1, 2, ... , 750], [0, 1, 2, ... , 559]]
Run Code Online (Sandbox Code Playgroud)

我所做的代码是这样的:

start = 0
new_values = []
for i,val in enumerate(values): 
    if(val == 0):
        new_values.append(values[start:i]) 
        start = i
Run Code Online (Sandbox Code Playgroud)

但是,它返回的是:

new_values = [[], …
Run Code Online (Sandbox Code Playgroud)

python list

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

标签 统计

python ×2

cpython ×1

list ×1

performance ×1

python-3.x ×1