Python中2D列表的不同点处的对角线

时间:2015-03-16 17:42:46

标签: list python-2.7

我想知道如何获取不通过中心的对角线值列表。

我们说我有一个嵌套的列表:

L = [[1,2,3],[4,5,6][7,8,9]]

我怎么能得到对角线[2,6]?

2 个答案:

答案 0 :(得分:0)

我不太确定你想要什么,但是这段代码为你提供了每个方向的所有完整对角线:

L = [[1,2,3],[4,5,6], [7,8,9]]
# number of rows, number of columns: ie L is m x n
m, n = len(L), len(L[0])

# Retreive the NE-SW (diag1) and NW-SE (diag2) diagonals
diag1 = []
diag2 = []
for p in range(m+n-1):
    diag1.append([])
    diag2.append([])
    q1 = 0
    if p >= n:
        q1 = p - n + 1
    q2 = m
    if p < m-1:
        q2 = p+1
    for q in range(q1, q2):
        x, y = p - q, q
        diag1[-1].append(L[y][x])
        # To get the other diagonal, read each row "backwards"
        x = n - x - 1
        diag2[-1].append(L[y][x])
print 'diag1:', diag1
print 'diag2:', diag2

那是:

diag1: [[1], [2, 4], [3, 5, 7], [6, 8], [9]]
diag2: [[3], [2, 6], [1, 5, 9], [4, 8], [7]]

答案 1 :(得分:0)

您将如何修改代码以接受具有以下特征的非m x n嵌套列表:len(L [i])&gt; LEN(L [I + 1])。

例如,以下嵌套列表:

[[1,2,3,4,5,6,7,8,9,10],
[11,12,13,14,15,16,17], 
[18,19,20,21,22], 
[23,24,25,26], 
[27,28], 
[29]]

应该产生:

[[1], 
[2,11], 
[3,12,18], 
[4,13,19,23], 
[5,14,20,24,27], 
[6,15,21,25,28,29], 
[7,16,22,26], 
[8,17], 
[9], 
[10]