【问题标题】:Is there a way to slice a list by its prime indices? [duplicate]有没有办法通过它的主要索引来分割一个列表? [复制]
【发布时间】:2020-06-24 17:03:39
【问题描述】:

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


【解决方案1】:

既然有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)

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

最后一点,实际上没有必要将 b 也转换为 numpy 数组。

【讨论】:

    【解决方案2】:

    怎么样:

    result = [a[i] for i in b]
    

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 2016-04-04
      • 2014-05-01
      • 2010-10-01
      • 2021-07-06
      • 2022-11-01
      • 1970-01-01
      相关资源
      最近更新 更多