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

Транспонирование матрицы

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

Условие

Напишите функцию, которая транспонирует матрицу (меняет строки и столбцы местами).

Пример

Вход: [[1, 2, 3], [4, 5, 6]] Выход: [[1, 4], [2, 5], [3, 6]]

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

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

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

Решение задачи на транспонирование матрицы

В контексте QA Automation, задача по транспонированию матрицы является отличным примером для проверки понимания основ программирования, работы с многомерными массивами и алгоритмического мышления. Это задание часто используется на собеседованиях для оценки способности кандидата писать чистый, эффективный и корректно работающий код.

Алгоритмический подход

Для транспонирования матрицы необходимо преобразовать строки исходной матрицы в столбцы результирующей матрицы. Если исходная матрица имеет размерность m x n (m строк, n столбцов), то транспонированная матрица будет иметь размерность n x m.

Ключевые шаги алгоритма:

  1. Определить количество строк и столбцов исходной матрицы
  2. Создать новую матрицу с "перевернутыми" размерами
  3. Пройти по всем элементам исходной матрицы и присвоить result[j][i] = matrix[i][j]

Реализация на Python

def transpose_matrix(matrix):
    """
    Транспонирует матрицу, меняя строки и столбцы местами.
    
    Args:
        matrix: Двумерный список (матрица) для транспонирования
    
    Returns:
        Двумерный список транспонированной матрицы
    
    Raises:
        ValueError: Если входные данные не являются корректной матрицей
    """
    # Проверка входных данных (важно для QA Automation)
    if not matrix or not isinstance(matrix, list):
        raise ValueError("Входные данные должны быть непустым списком")
    
    # Проверяем, что все строки имеют одинаковую длину
    if len(matrix) > 0:
        row_length = len(matrix[0])
        for i, row in enumerate(matrix):
            if not isinstance(row, list):
                raise ValueError(f"Строка {i} должна быть списком")
            if len(row) != row_length:
                raise ValueError("Все строки матрицы должны иметь одинаковую длину")
    
    # Транспонирование матрицы
    rows = len(matrix)
    cols = len(matrix[0]) if rows > 0 else 0
    
    # Создаем новую матрицу с перевернутыми размерами
    transposed = [[0 for _ in range(rows)] for _ in range(cols)]
    
    # Заполняем транспонированную матрицу
    for i in range(rows):
        for j in range(cols):
            transposed[j][i] = matrix[i][j]
    
    return transposed


# Альтернативная реализация с использованием list comprehension
def transpose_matrix_comprehension(matrix):
    """Более питоничный вариант транспонирования"""
    if not matrix:
        return []
    
    return [[matrix[i][j] for i in range(len(matrix))] 
            for j in range(len(matrix[0]))]


# Тестирование функции
def test_transpose_matrix():
    """Функция тестирования для проверки корректности работы"""
    test_cases = [
        {
            "input": [[1, 2, 3], [4, 5, 6]],
            "expected": [[1, 4], [2, 5], [3, 6]]
        },
        {
            "input": [[1, 2], [3, 4], [5, 6]],
            "expected": [[1, 3, 5], [2, 4, 6]]
        },
        {
            "input": [[1]],
            "expected": [[1]]
        },
        {
            "input": [[1, 2, 3]],
            "expected": [[1], [2], [3]]
        }
    ]
    
    for i, test_case in enumerate(test_cases):
        result = transpose_matrix(test_case["input"])
        assert result == test_case["expected"], \
            f"Тест {i+1} не пройден: ожидалось {test_case['expected']}, получено {result}"
        print(f"Тест {i+1} пройден успешно")
    
    print("Все тесты пройдены!")


# Пример использования
if __name__ == "__main__":
    # Пример из условия задачи
    matrix = [[1, 2, 3], [4, 5, 6]]
    print("Исходная матрица:")
    for row in matrix:
        print(row)
    
    result = transpose_matrix(matrix)
    print("\nТранспонированная матрица:")
    for row in result:
        print(row)
    
    # Запуск тестов
    print("\nЗапуск тестов:")
    test_transpose_matrix()

Аспекты, важные для QA Automation

  1. Валидация входных данных:

    • Проверка типа входных параметров
    • Обработка пустых матриц
    • Проверка согласованности размеров строк
  2. Обработка краевых случаев:

    • Матрица 1x1
    • Матрица из одной строки или одного столбца
    • Пустая матрица
  3. Производительность:

    • Временная сложность: O(m*n), где m и n - размеры матрицы
    • Пространственная сложность: O(m*n) для хранения результата
  4. Тестируемость:

    • Функция должна быть чистой (без side effects)
    • Предсказуемое поведение для всех валидных входных данных
    • Ясные сообщения об ошибках для невалидных данных

Практическое применение в тестировании

В QA Automation транспонирование матрицы может использоваться в различных сценариях:

  • Преобразование данных для сравнения результатов в разных форматах
  • Обработка тестовых данных, представленных в табличном виде
  • Валидация алгоритмов, работающих с матричными операциями
  • Создание утилит для работы с конфигурационными файлами

Рекомендации для собеседования

  1. Обсуждайте trade-offs: упомяните альтернативные реализации и их компромиссы
  2. Демонстрируйте знание best practices: обработка ошибок, документация, тестирование
  3. Приводите примеры из реального опыта: где подобные преобразования данных применялись в ваших проектах
  4. Говорите о масштабируемости: как функция будет работать с большими матрицами

Данная задача, хотя и выглядит простой, позволяет продемонстрировать глубокое понимание принципов разработки и тестирования, что особенно ценится в кандидатах на позицию QA Automation Engineer.