📌 How to: продвинутые срезы в Python
Срезы — одна из самых мощных фич Python. Помимо базового [start:stop:step]
, они открывают массу возможностей при работе с данными.
Вот несколько продвинутых приёмов, которые вы точно захотите использовать:
def rotate(lst, k):
k %= len(lst)
return lst[-k:] + lst[:-k]
rotate([1, 2, 3, 4, 5], 2) # → [4, 5, 1, 2, 3]
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
days[::3] # → ['Mon', 'Thu']
days[5:] # → ['Sat', 'Sun']
nums = list(range(10))
nums[::2] # чётные индексы → [0, 2, 4, 6, 8]
nums[1::2] # нечётные индексы → [1, 3, 5, 7, 9]
nums = [0]*10
nums[::2] = range(5) # → [0, 0, 1, 0, 2, 0, 3, 0, 4, 0]
data = "abcdefghij"
[data[i:i+2] for i in range(0, len(data), 2)]
# → ['ab', 'cd', 'ef', 'gh', 'ij']
matrix = [[1,2,3], [4,5,6], [7,8,9]]
[row[1] for row in matrix] # → [2, 5, 8]
[matrix[i][i] for i in range(3)] # → [1, 5, 9]
s = slice(2, 8, 2)
lst = list(range(10))
lst[s] # → [2, 4, 6]
import numpy as np
arr = np.arange(100).reshape(10, 10)
arr[-3:, -3:] # Подматрица 3×3 в правом нижнем углу
import pandas as pd
df = pd.DataFrame({'A': [1,2,3,4], 'B': [10,20,30,40]})
df.iloc[:2] # первые 2 строки
df.loc[df['A'] > 2] # строки, где A > 2
b = b'Hello, world!'
b[:5] # → b'Hello'
ba = bytearray([10, 20, 30, 40])
list(ba[1:3]) # → [20, 30]
⚡️ Срезы = читаемый, быстрый и питоничный способ работы с данными. Чем чаще используете — тем меньше кода и ошибок.
📎 Сохраните и поделитесь, если было полезно! Делитесь в комментариях, какими ещё приёмами пользуетесь.
Библиотека питониста #буст