2017-04-09 61 views
-2

我有這個列表的列表,我想將它轉換爲列表的對稱列表。我該怎麼辦?Python-生成列表數據的一半nxn列表的對稱列表

[[0, 8, 4, 10, 12, 9, 15, 8, 11, 5, 9, 4, 10], 
    [0, 0, 7, 6, 8, 6, 7, 10, 12, 9, 8, 7, 5], 
    [0, 0, 0, 7, 9, 5, 8, 5, 4, 8, 6, 10, 8], 
    [0, 0, 0, 0, 6, 11, 5, 9, 8, 12, 11, 6, 9], 
    [0, 0, 0, 0, 0, 7, 9, 6, 9, 8, 4, 11, 10], 
    [0, 0, 0, 0, 0, 0, 10, 4, 3, 10, 6, 5, 7], 
    [0, 0, 0, 0, 0, 0, 0, 10, 9, 8, 5, 9, 10], 
    [0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 9, 6, 7], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 11, 11, 6], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 
+1

你還沒有指定*你想如何使它成爲列表的對稱列表。目前還不清楚。你想要對角線以上的元素被反射到對角線以下嗎? –

+2

你真的可以發佈你想要的輸出以及你迄今爲止所經歷的思考過程嗎? –

回答

1

如果這是你的 「對稱」 的意思,你可以使用numpy做:

import numpy as np 

m = np.array([[0, 8, 4, 10, 12, 9, 15, 8, 11, 5, 9, 4, 10], 
    [0, 0, 7, 6, 8, 6, 7, 10, 12, 9, 8, 7, 5], 
    [0, 0, 0, 7, 9, 5, 8, 5, 4, 8, 6, 10, 8], 
    [0, 0, 0, 0, 6, 11, 5, 9, 8, 12, 11, 6, 9], 
    [0, 0, 0, 0, 0, 7, 9, 6, 9, 8, 4, 11, 10], 
    [0, 0, 0, 0, 0, 0, 10, 4, 3, 10, 6, 5, 7], 
    [0, 0, 0, 0, 0, 0, 0, 10, 9, 8, 5, 9, 10], 
    [0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 9, 6, 7], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 11, 11, 6], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) 

sym = m + m.transpose() 

sym.tolist() 

#  [[ 0, 8, 4, 10, 12, 9, 15, 8, 11, 5, 9, 4, 10], 
#  [ 8, 0, 7, 6, 8, 6, 7, 10, 12, 9, 8, 7, 5], 
#  [ 4, 7, 0, 7, 9, 5, 8, 5, 4, 8, 6, 10, 8], 
#  [10, 6, 7, 0, 6, 11, 5, 9, 8, 12, 11, 6, 9], 
#  [12, 8, 9, 6, 0, 7, 9, 6, 9, 8, 4, 11, 10], 
#  [ 9, 6, 5, 11, 7, 0, 10, 4, 3, 10, 6, 5, 7], 
#  [15, 7, 8, 5, 9, 10, 0, 10, 9, 8, 5, 9, 10], 
#  [ 8, 10, 5, 9, 6, 4, 10, 0, 11, 5, 9, 6, 7], 
#  [11, 12, 4, 8, 9, 3, 9, 11, 0, 9, 11, 11, 6], 
#  [ 5, 9, 8, 12, 8, 10, 8, 5, 9, 0, 6, 7, 5], 
#  [ 9, 8, 6, 11, 4, 6, 5, 9, 11, 6, 0, 10, 7], 
#  [ 4, 7, 10, 6, 11, 5, 9, 6, 11, 7, 10, 0, 9], 
#  [10, 5, 8, 9, 10, 7, 10, 7, 6, 5, 7, 9, 0]] 
+0

謝謝。順便說一句,你知道我怎麼可以將數組轉換回列表清單? – user02

+0

查看編輯答案。 –

+0

Numpy肯定比直接操作列表清單更清晰。 –

0

使用基地Python中,你可以做這樣的:

AT = [list(col) for col in zip(*A)] 

B = [r[:i]+s[i:] for i,(r,s) in enumerate(zip(AT,A))] 

然後:

>>> for r in B: print(r) 

[0, 8, 4, 10, 12, 9, 15, 8, 11, 5, 9, 4, 10] 
[8, 0, 7, 6, 8, 6, 7, 10, 12, 9, 8, 7, 5] 
[4, 7, 0, 7, 9, 5, 8, 5, 4, 8, 6, 10, 8] 
[10, 6, 7, 0, 6, 11, 5, 9, 8, 12, 11, 6, 9] 
[12, 8, 9, 6, 0, 7, 9, 6, 9, 8, 4, 11, 10] 
[9, 6, 5, 11, 7, 0, 10, 4, 3, 10, 6, 5, 7] 
[15, 7, 8, 5, 9, 10, 0, 10, 9, 8, 5, 9, 10] 
[8, 10, 5, 9, 6, 4, 10, 0, 11, 5, 9, 6, 7] 
[11, 12, 4, 8, 9, 3, 9, 11, 0, 9, 11, 11, 6] 
[5, 9, 8, 12, 8, 10, 8, 5, 9, 0, 6, 7, 5] 
[9, 8, 6, 11, 4, 6, 5, 9, 11, 6, 0, 10, 7] 
[4, 7, 10, 6, 11, 5, 9, 6, 11, 7, 10, 0, 9] 
[10, 5, 8, 9, 10, 7, 10, 7, 6, 5, 7, 9, 0] 
0

這不會顛倒子列表元素j子列表

x=[[0, 8, 4, 10, 12, 9, 15, 8, 11, 5, 9, 4, 10], 
[0, 0, 7, 6, 8, 6, 7, 10, 12, 9, 8, 7, 5], 
[0, 0, 0, 7, 9, 5, 8, 5, 4, 8, 6, 10, 8], 
[0, 0, 0, 0, 6, 11, 5, 9, 8, 12, 11, 6, 9], 
[0, 0, 0, 0, 0, 7, 9, 6, 9, 8, 4, 11, 10], 
[0, 0, 0, 0, 0, 0, 10, 4, 3, 10, 6, 5, 7], 
[0, 0, 0, 0, 0, 0, 0, 10, 9, 8, 5, 9, 10], 
[0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 9, 6, 7], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 11, 11, 6], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 

reversex = x[::-1] 
for l in reversex: 
    print (l) 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 11, 11, 6] 
[0, 0, 0, 0, 0, 0, 0, 0, 11, 5, 9, 6, 7] 
[0, 0, 0, 0, 0, 0, 0, 10, 9, 8, 5, 9, 10] 
[0, 0, 0, 0, 0, 0, 10, 4, 3, 10, 6, 5, 7] 
[0, 0, 0, 0, 0, 7, 9, 6, 9, 8, 4, 11, 10] 
[0, 0, 0, 0, 6, 11, 5, 9, 8, 12, 11, 6, 9] 
[0, 0, 0, 7, 9, 5, 8, 5, 4, 8, 6, 10, 8] 
[0, 0, 7, 6, 8, 6, 7, 10, 12, 9, 8, 7, 5] 
[0, 8, 4, 10, 12, 9, 15, 8, 11, 5, 9, 4, 10]