1

重複の可能性:
Python - リストが対称かどうかを判断するアルゴリズム

最初の行が最初の列と同じで、2 番目の行が 2 番目の列と同じであり、要素が同じ場合はブール値の 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, ...)です

等しいかどうかのテストでは、対角線上にない各ペアを 2 回比較するので、無駄に見えるかもしれませんが、これは 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 に答える