Python从右到左对角线列表

时间:2018-09-01 19:44:07

标签: python python-3.x algorithm list

我希望将一个列表从右到左对角地存储到另一个列表中,如果可能的话不导入任何内容

eg. list = 
[[1, 4, 6]
[6, 3, 7]
[2, 7, 9]]

说我想将[6,3,2]存储到另一个列表中,我该怎么做呢?我已经尝试了许多小时的方法,但仍然找不到解决方法

5 个答案:

答案 0 :(得分:0)

以下内容被剪掉

l =[[1, 4, 6],
    [6, 3, 7],
    [2, 7, 9]]
d = len(l)
a = []
for i in range(0,d):
    a.append(l[i][d-1-i])
print(a)

产生您期望的输出:

[6, 3, 2]

答案 1 :(得分:0)

当您想从另一个列表中创建一个列表时,列表理解是一个很好的方法。

a = yourlist
print([a[i][(i+1)*-1] for i in range(len(a))])

此列表理解会循环遍历列表,并取回最远的整数和第二个等。

答案 2 :(得分:0)

具有列表理解:

l =[[1, 4, 6],
    [6, 3, 7],
    [2, 7, 9]]

diagonal = [row[-i]  for i, row in enumerate(l, start=1)]

print(diagonal)

输出

[6, 3, 2]

答案 3 :(得分:0)

您可以使用列表推导并使用列表索引两次来选择行和列:

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

n = len(L)
res = [L[i][n-i-1] for i in range(n)]
# [6, 3, 2]

一种替代方法是按照@OlivierMelançon的解决方案使用enumerate

如果可以使用第3方库,则可以使用NumPy提取翻转数组的对角线:

import numpy as np

arr = np.array(L)

res = np.diag(np.fliplr(arr))
# array([6, 3, 2])

答案 4 :(得分:0)

使用numpy并旋转(90)

import numpy as np
list = [[1, 4, 6],[6, 3, 7],[2, 7, 9]]
np.diag(np.rot90(array))

输出:

array([6, 3, 2])

或不使用numpy:

list = [[1, 4, 6],[6, 3, 7],[2, 7, 9]]

res=[]
i=-1
for elm in list :
    res.append(elm[i])
    i-=1

print res
#[6, 3, 2]