我希望将一个列表从右到左对角地存储到另一个列表中,如果可能的话不导入任何内容
eg. list =
[[1, 4, 6]
[6, 3, 7]
[2, 7, 9]]
说我想将[6,3,2]存储到另一个列表中,我该怎么做呢?我已经尝试了许多小时的方法,但仍然找不到解决方法
答案 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]