2012-07-05 4 views
1

Можно создать дубликат:
Python - Algorithm to determine if a list is symmetricсравнить строку и столбец в списке, используя функцию Python

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

def symmetric(my_list): 

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

Это домашнее задание? Попробуйте отправить некоторые из своих попыток, прежде чем попросить нас сделать вашу задачу за вас. – inspectorG4dget

+0

@PaulMcGuire, хех, я перегнал вас :) –

+0

Привет, Это то, что я пробовал до сих пор, и я получаю сообщение об ошибке sytax: – Fadyboy

ответ

4

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

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

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

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

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

Если это домашнее задание, я полагаю, что вы, вероятно, следует использовать вложенные циклы

EDIT: В Python3, map(...) возвращает объект на карте, вы можете получить поведение python2 помощью list(map(...))

EDIT: Я думаю, что в Python3, это лучше

all(i==j for i,*j in zip(my_list ,*my_list)) 
+0

Очень элегантный :) –

+0

+1, вы можете добавить правку о Python 3 .x: 'map()' возвращает объект map в python 3.x, поэтому сравнение вернет 'False' в python 3.x –

+0

@AshwiniChaudhary, я подумал о более аккуратном способе сделать это в Python3 –

0
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 затем говорит вам результат.