1

可能重复:
Python - 确定列表是否对称的算法

我需要帮助编写一个 Python 函数 - 对称的,它接受一个大小为 n 的列表(它是一个方阵)作为输入,它检查第一行与第一列相同,第二行与第二列相同,并且以此类推,如果元素相同则返回布尔值 True,否则返回 false。该列表可以包含整数或字符串。

def symmetric(my_list):

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

2 回答 2

4

这适用于 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))
于 2012-07-05T22:58:17.287 回答
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然后告诉你结果。

于 2012-07-05T23:15:08.187 回答