Сравнить строку и столбец в списке с помощью функции python

Возможный дубликат:
Python - алгоритм для определения симметричности списка

Мне нужна помощь в написании Python-функции - симметричной, которая принимает в качестве входных данных список размером n(который представляет собой квадратную матрицу), который проверяет, что первая строка совпадает с первым столбцом, вторая строка совпадает со вторым столбцом и и т. д. и возвращает логическое значение True, если элементы одинаковы, и значение false, если они не совпадают. Список может содержать целые числа или строки.

def symmetric(my_list):

my_list = [[1, 2, 3],
           [2, 3, 4],
           [3, 4, 1]]

2 ответа

Это работает в Python2

my_list == map(list, zip(*my_list))

zip(*some_2d_list) это довольно известная идиома, когда some_2d_list распаковывается и обрабатывается zip имеет эффект транспонирования строк и столбцов

К сожалению, zip возвращает список кортежей, поэтому их необходимо преобразовать в списки. Это то, что map(list, ...) делает

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

Если это домашнее задание, я бы посоветовал вам использовать вложенные циклы

РЕДАКТИРОВАТЬ: В Python3, map(...) возвращает объект карты, вы можете получить поведение Python2, используя list(map(...))

РЕДАКТИРОВАТЬ: я думаю, в Python3, это лучше

all(i==j for i,*j in zip(my_list ,*my_list))
import numpy as np
# convert the 2d list into an ndarry
x = np.array(my_list)
# test if x is identical to its transpose
isSymmetric = (x.T == x).all()

isSymmetric затем говорит вам результат.

Другие вопросы по тегам