为什么列表理解中没有变量增量

时间:2017-08-18 05:47:48

标签: python-3.x list-comprehension

鉴于;

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:如何修复语句以实现欲望结果?

4 个答案:

答案 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]))]