鉴于;
Empty[Int]()
我想获得一个对角线列表 - 使用单个列表理解语句。
a = [[1,2,3,4],
[5,6,7,8],
[9,0,1,2],
[3,4,5,6]]
我希望我能用
这样做[1,6,1,6]
但我得到了结果;
i = -1 # (cheating but I didn not know how else to do it)
dia_1 = [r[i] for (r,i) in [(r, i+1) for r in a]]
所以,我一定不能增加:
Q1:为什么不'我'增加?
Q2:如何修复语句以实现欲望结果?
答案 0 :(得分:3)
为什么不喜欢
dia_1 = [a[n][n] for n in range(len(a))]
或
dia_1 = [r[n] for n, r in enumerate(a)]
虽然第二种方法在我个人看来更美观,但它们产生相同的结果。两者都假设n
行具有n
元素,而不管列表的实际形状如何。
要回答有关递增的问题,在您理解的任何地方都没有i
的任务。 i + 1
具有常量值0
,因此您可以按预期获取第一列。
答案 1 :(得分:1)
为什么没有'我'递增?
因为你从未告诉过它。你也不能。
如何修复语句以实现欲望结果?
完全不同。
[r[e] for e, r in enumerate(a)]
答案 2 :(得分:0)
尝试enumerate(a)
希望这是你的蚂蚁......
我得到了输出
a = [[1,2,3,4],
[5,6,7,8],
[9,0,1,2],
[3,4,5,6]]
dia_1 = [r[i] for i,r in enumerate(a)]
print(dia_1)
>>>[1, 6, 1, 6]
答案 3 :(得分:0)
主对角线可以通过以下方式提取:
dia_1 = [a[i][i] for i in range(len(a[0]))]