繁体   English   中英

Python从右到左对角线列表

[英]Python right to left diagonal list

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

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

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

以下内容已被删除

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]

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

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

此列表理解会循环遍历列表,并返回第二个整数,依此类推。

具有列表理解:

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]

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

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

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

import numpy as np

arr = np.array(L)

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

使用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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM