Pau*_*l W 26 python arrays list
我试图在逐步遍历数组的每个n元素时获取m值.例如,对于m = 2和n = 5,并给出
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
我想要检索
b = [1, 2, 6, 7]
Run Code Online (Sandbox Code Playgroud)
有没有办法使用切片来做到这一点?我可以使用嵌套列表理解来做到这一点,但我想知道是否有办法只使用索引来做到这一点.作为参考,列表理解方式是:
b = [k for j in [a[i:i+2] for i in range(0,len(a),5)] for k in j]
Run Code Online (Sandbox Code Playgroud)
Kev*_*vin 24
我同意wim,你不能只用切片来做到这一点.但是你可以只用一个列表理解来做到这一点:
>>> [x for i,x in enumerate(a) if i%n < m]
[1, 2, 6, 7]
Run Code Online (Sandbox Code Playgroud)
总之,不,你不能.但您可以使用itertools删除中间列表的需要:
from itertools import chain, islice
res = list(chain.from_iterable(islice(a, i, i+2) for i in range(0, len(a), 5)))
print(res)
[1, 2, 6, 7]
Run Code Online (Sandbox Code Playgroud)
借用@Kevin的逻辑,如果你想要一个矢量化的解决方案来避免for循环,你可以使用第三方库numpy:
import numpy as np
m, n = 2, 5
a = np.array(a) # convert to numpy array
res = a[np.where(np.arange(a.shape[0]) % n < m)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |