可能的重复项:
Python - 确定列表是否对称的算法
我需要帮助编写一个 Python 函数 - 对称,它将大小为 n(这是一个方阵)的列表作为输入,该列表检查第一行是否与第一列相同,第二行是否与第二列相同,依此类推,如果元素相同,则返回布尔值 True,如果元素相同,则返回 false。该列表可以包含整数或字符串。
def symmetric(my_list):
my_list = [[1, 2, 3],
[2, 3, 4],
[3, 4, 1]]
在Python2中有效
my_list == map(list, zip(*my_list))
zip(*some_2d_list)
是一个相当著名的成语,当some_2d_list
被解压缩并经过zip
处理时,它具有转置行和列的效果
不幸的是,zip 返回一个元组列表,因此有必要将它们转换为列表。这就是map(list, ...)
所做的
这可能看起来很浪费,因为相等性测试将比较不在对角线上的每对对两次,但这是在 C 级别完成的,因此比使用显式循环和进行最少数量的比较要快得多。
如果是家庭作业,我建议你应该使用嵌套循环
编辑:在Python3中,map(...)
返回一个map对象,你可以通过使用list(map(...))
来获取Python2行为
编辑:我认为在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
告诉您结果。