Python 有没有一种方法可以根据列表的基本索引对列表进行切片?
让 是否有一种通过Python 有没有一种方法可以根据列表的基本索引对列表进行切片?,python,numpy,slice,numpy-slicing,Python,Numpy,Slice,Numpy Slicing,让 是否有一种通过b切片a的Pythonic方法 i、 e 产出将是 a[b] 那么: result=[a[i]代表b中的i] 因为有numpy标签: [3, 4, ... 90, 98] 时间性能比较: 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))
b
切片a
的Pythonic方法
i、 e
产出将是
a[b]
那么:
result=[a[i]代表b中的i]
因为有numpy标签:
[3, 4, ... 90, 98]
时间性能比较:
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)
Numpy
%timeit [a[i] for i in b]
2.31 ms ± 456 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
通过一个简单的测试,我们可以看到,对于长度为100_000的数组,numpy要快20倍,但是这不是一个公平的比较,因为我没有考虑导入库和将列表转换为数组的时间
最后,实际上没有必要将
b
转换为numpy数组。这是否回答了您的问题?
%timeit [a[i] for i in b]
2.31 ms ± 456 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit c[d]
115 µs ± 7.57 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)