Самый короткий способ нарезать четные / нечетные строки из массива python?


или, более общий вопрос будет заключаться в том, как разрезать массив, чтобы получить каждую n-ю строку, поэтому для четных/нечетных вы хотите пропустить одну строку, но в общем случае вы хотите получить каждую n-ю строку, пропустив n-1 строк.

3 55

3 ответа:

если вы говорите о список, вы указываете шаг в срезе (и начальный индекс). Синтаксис list[start:end:step].

вы, вероятно, знаете обычный доступ к списку, чтобы получить элемент, например l[2] чтобы получить третий элемент. Давая два числа и двоеточие между ними, вы можете указать ряд что вы хотите получить из списка. Возвращаемое значение-это другой список. Е. Г. l[2:5] дает вам третий-шестой пункт. Вы также можете передать необязательный третий номер, который определяет размер шага. Размер шага по умолчанию-один, что просто означает возьмите каждый элемент (между начальным и конечным индексом).

пример:

>>> l = range(10)
>>> l[::2]         # even  - start at the beginning at take every second item
[0, 2, 4, 6, 8]
>>> l[1::2]        # odd - start at second item and take every second item
[1, 3, 5, 7, 9]

посмотреть списки в учебнике Python.

если вы хотите получить все n элемент списка (т. е. исключая первый элемент), вы должны были бы нарезать как l[(n-1)::n].

пример:

>>> l = range(20)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

теперь, получая каждый третий элемент будет:

>>> l[2::3]
[2, 5, 8, 11, 14, 17]

если вы хотите включить Первый элемент, вы просто сделать l[::n].

Это больше для меня как пример ;)

>>> import itertools
>>> ret = [[1,2], [3,4,5,6], [7], [8,9]]
>>> itertools.izip_longest(*ret)
>>> [x for x in itertools.chain.from_iterable(tmp) if x is not None]
[1, 3, 7, 8, 2, 4, 9, 5, 6]
> map(lambda index: arr[index],filter(lambda x: x%n == 0,range(len(arr))))

здесь arr - Это список, и ломтики.