Блок нарезки с шагом в питоне - PullRequest
0 голосов
/ 05 ноября 2019

Мне интересно, возможно ли субиндексировать каждый n-й блок в python. Можно сделать

a = [1, 2, 3, 4, 5, 6, 7, 8]
a[::2]

, который дает каждую секунду значение

[1, 3, 5, 7]

, но что, если я хочу что-то вроде:

[1, 2, 5, 6]

, так что в основном каждый 2-й блокс длиной 2. Возможно ли это как-нибудь с субиндексом?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Интересный вопрос.

Вы можете сделать следующее, но вы потеряете порядок массива

a[::4] + a[1::4]

Вывод:

[1, 5, 2, 6]

С помощью Numpy вы можете создатьмаска с модулем вот так:

import numpy as np
mod4 = np.arange(len(a)) % 4
np.array(a)[(mod4==0) | (mod4==1)]

Вывод:

array([1, 2, 5, 6])
0 голосов
/ 05 ноября 2019

вы можете обойти вот так

import itertools
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = list(itertools.chain(*[a[i:i+2] for i in range(0, len(a), 2)][::2]))
assert b == [1,2,5,6]
...