2017-04-09 58 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]