← Назад к вопросам

Каждый N-й элемент

2.0 Middle🔥 181 комментариев
#Теория тестирования

Условие

Напишите функцию, которая возвращает каждый N-й элемент из массива.

Пример

Вход: [1, 2, 3, 4, 5, 6, 7, 8, 9], N = 3 Выход: [3, 6, 9]

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Анализ задачи

Необходимо извлечь каждый N-й элемент из массива. Это типичная задача на работу с индексами и срезами данных, которая часто используется в автоматизации тестирования при выборке данных из логов, ответов API или выборке тестовых случаев из больших наборов.

Решение

Создам несколько вариантов решения:

def get_every_nth_element(arr: list, n: int) -> list:
    """Возвращает каждый N-й элемент из массива."""
    if n <= 0:
        raise ValueError("N должно быть положительным числом")
    if not arr:
        return []
    
    return arr[n - 1::n]


class NthElementExtractor:
    """Класс для извлечения каждого N-го элемента."""
    
    @staticmethod
    def extract_iterative(arr: list, n: int) -> list:
        """Извлечение через цикл."""
        if n <= 0:
            raise ValueError("N должно быть положительным числом")
        
        result = []
        for i in range(n - 1, len(arr), n):
            result.append(arr[i])
        return result
    
    @staticmethod
    def extract_with_filter(arr: list, n: int) -> list:
        """Извлечение через фильтрацию."""
        if n <= 0:
            raise ValueError("N должно быть положительным числом")
        
        return [val for idx, val in enumerate(arr, start=1) if idx % n == 0]

Примеры использования

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(get_every_nth_element(arr, 3))  # [3, 6, 9]
print(NthElementExtractor.extract_iterative(arr, 3))  # [3, 6, 9]
print(NthElementExtractor.extract_with_filter(arr, 3))  # [3, 6, 9]

Ключевые моменты

Подходы:

  • Срезы [n-1::n] — O(1), оптимизированный встроенный механизм Python
  • Итеративный цикл — O(n) с явным управлением индексом
  • Фильтрация enumerate — O(n) с условием

Важные детали:

  • N должно быть положительным
  • Индекс N-го элемента = N-1 (нулевая индексация)
  • Срезы работают с шагом N начиная с индекса N-1
  • Пустые массивы обрабатываются корректно

Граничные случаи для тестирования:

  • N = 1 (все элементы)
  • N больше длины массива
  • Пустой массив
  • Отрицательное N (ошибка)
  • N = 0 (ошибка)
Каждый N-й элемент | PrepBro