Python列表理解逻辑示例
我正在学习Python中的列表理解,遇到了以下示例:Python列表理解逻辑示例,python,list-comprehension,Python,List Comprehension,我正在学习Python中的列表理解,遇到了以下示例: vec = [[11, 21, 31], [42, 52, 62], [73, 83, 93]] var=[vec[i][len(vec)-1-i] for i in range(len(vec))] print(var) 我想确切地理解这行后面的逻辑,列表理解在哪里,以及为什么代码停止迭代到I=2?(我在调试模式下看到了,但我仍然不清楚)。 那么“len(vec)-1-i”到底需要什么呢?我知道len(vec)-1是我列表中的最后一个,但
vec = [[11, 21, 31],
[42, 52, 62],
[73, 83, 93]]
var=[vec[i][len(vec)-1-i] for i in range(len(vec))]
print(var)
我想确切地理解这行后面的逻辑,列表理解在哪里,以及为什么代码停止迭代到I=2?(我在调试模式下看到了,但我仍然不清楚)。
那么“len(vec)-1-i”到底需要什么呢?我知道len(vec)-1是我列表中的最后一个,但为什么是-i呢
var=[vec[i][len(vec)-1-i] for i in range(len(vec))]
这一行表示列表理解。这里您正在为
范围(3)
运行for循环,因此它在i=2
处停止,作为0
,1
迭代,然后2
len(vec)-1-i
生成2
,1
,0
。您正在访问vec[0][2],,vec[1]
,然后通过for循环vec[2][0]
。我将逐步解释您的代码:
# This creates a 2D matrix (a nested list as we say in Python).
vec = [[11, 21, 31],
[42, 52, 62],
[73, 83, 93]]
# To obtain all the elements of the counterdiagonal in the 2D matrix, we iterate with inital value of i set to `0`, then,
# Possible values for i varaible will be 0,1,2.
# Hence, vec[i][len(vec)-1-i] will select following elements:
# vec[0][2] = 31
# vec[1][1] = 52
# vec[2][0] = 73
# These elements will then be stored in a new list named var. Hence when you print var, you'll get :
var=[vec[i][len(vec)-1-i] for i in range(len(vec))]
# Output : [31, 52, 73]
print(var)
为什么代码停止迭代到i=2?(我在调试模式下看到了,但我仍然不清楚)
什么是len(vec)
?vec
是一个列表列表。len
只获取最外层的长度。在本例中,3
请尝试打印(列表(范围(3))
以查看您将获得的i
的值。(说明:range
上限是独占的,因此它永远不会达到3。)
这确保了vec[i]
永远不会超出范围
那么“len(vec)-1-i”到底需要什么呢?我知道len(vec)-1是我列表中的最后一个,但为什么是-i呢
var=[vec[i][len(vec)-1-i] for i in range(len(vec))]
vec[i]
获取当前子列表
len(vec)
是外部列表(3)的长度,len(vec)-1
是最后一个元素的索引,i
从0变为len(vec)-1
(含)
让我们分析一下,对于每个i,len(vec)-1-i将得到什么值:
- i=0=>2
- i=1=>1
- i=2=>0
我们基本上是在用索引“返回”
所以我们得到的是vec[0][2]
,vec[1][1]
,vec[2][0]
。也就是说,vec
的对角线,从右上角到左下角。len(vec)
等于3,范围(3)
返回0,1,2
。
vec[i][len(vec)-1-i]