Транспонирование матрицы
Условие
Напишите функцию, которая транспонирует матрицу (меняет строки и столбцы местами).
Пример
Вход: [[1, 2, 3], [4, 5, 6]] Выход: [[1, 4], [2, 5], [3, 6]]
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение задачи на транспонирование матрицы
В контексте QA Automation, задача по транспонированию матрицы является отличным примером для проверки понимания основ программирования, работы с многомерными массивами и алгоритмического мышления. Это задание часто используется на собеседованиях для оценки способности кандидата писать чистый, эффективный и корректно работающий код.
Алгоритмический подход
Для транспонирования матрицы необходимо преобразовать строки исходной матрицы в столбцы результирующей матрицы. Если исходная матрица имеет размерность m x n (m строк, n столбцов), то транспонированная матрица будет иметь размерность n x m.
Ключевые шаги алгоритма:
- Определить количество строк и столбцов исходной матрицы
- Создать новую матрицу с "перевернутыми" размерами
- Пройти по всем элементам исходной матрицы и присвоить
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
-
Валидация входных данных:
- Проверка типа входных параметров
- Обработка пустых матриц
- Проверка согласованности размеров строк
-
Обработка краевых случаев:
- Матрица 1x1
- Матрица из одной строки или одного столбца
- Пустая матрица
-
Производительность:
- Временная сложность: O(m*n), где m и n - размеры матрицы
- Пространственная сложность: O(m*n) для хранения результата
-
Тестируемость:
- Функция должна быть чистой (без side effects)
- Предсказуемое поведение для всех валидных входных данных
- Ясные сообщения об ошибках для невалидных данных
Практическое применение в тестировании
В QA Automation транспонирование матрицы может использоваться в различных сценариях:
- Преобразование данных для сравнения результатов в разных форматах
- Обработка тестовых данных, представленных в табличном виде
- Валидация алгоритмов, работающих с матричными операциями
- Создание утилит для работы с конфигурационными файлами
Рекомендации для собеседования
- Обсуждайте trade-offs: упомяните альтернативные реализации и их компромиссы
- Демонстрируйте знание best practices: обработка ошибок, документация, тестирование
- Приводите примеры из реального опыта: где подобные преобразования данных применялись в ваших проектах
- Говорите о масштабируемости: как функция будет работать с большими матрицами
Данная задача, хотя и выглядит простой, позволяет продемонстрировать глубокое понимание принципов разработки и тестирования, что особенно ценится в кандидатах на позицию QA Automation Engineer.