是否可以通过其主要索引对列表进行切片? [重复]

问题描述 投票:-1回答:2

a = [1, 2, ... 99, 100] # numbers 1 to 100
b = [2, 3, ... 89, 97] # prime numbers under 100

是否有Pythonic的方式可以将a切成b

a[b]

输出为

[3, 4, ... 90, 98]
python numpy slice numpy-slicing
2个回答
2
投票

因为有numpy标签:

import numpy as np
a = np.array(a)
b = np.array(b)

result = a[b]

时间性能比较:

import numpy as np
N=100_000

a = list(range(N))
b = list(range(1, N, 3))

c = np.array(a)
d = np.array(b)

列表理解

%timeit [a[i] for i in b]
2.31 ms ± 456 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Numpy

%timeit c[d]
115 µs ± 7.57 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

使用一个简单的测试,我们可以看到长度为100_000的数组的numpy的速度快20倍,但这是不公平的比较,因为我没有考虑导入库和将列表转换为数组的时间。

最后,实际上不需要将b也转换为numpy数组。


2
投票

怎么样:

result = [a[i] for i in b]
© www.soinside.com 2019 - 2024. All rights reserved.