迭代的输出是什么

时间:2015-11-17 17:02:58

标签: python

print ( [ 2 ∗ [ k ] for k in range ( 3 ) ] [ 2 ] [ 1 ] )

上述代码的输出是什么?为什么输出我很困惑,不知道如何解决它

2 个答案:

答案 0 :(得分:1)

让我们一步一步:

1)。 你有一个列表理解,如下所示:

[ 2 ∗ [ k ] for k in range ( 3 ) ]

这真的只是意味着:

2 * [k]中的每个项k创建:range(3),这只是一个像0-3的整数组成的对象列表(不包括3,包括0) 。 2*[k]说要将仅包含k的列表乘以2,所以2*[1] == [1,1]

所以,print( [ 2 ∗ [ k ] for k in range ( 3 ) ])会给你:

>>> print([2*[k] for k in range(3)])
[[0, 0], [1, 1], [2, 2]]

2。)然后你只是使用l[2][1]对该列表进行子脚本编写,这意味着get the item at index 1 from the item at index 2(即,一个双重列表切片)。这是有效的,因为你有上面的嵌套列表。

因此,如果此子列表为[2,2],则列表索引2处的项目为2,而您的项目位于索引1处。

因此:

>>> print ( [ 2 * [ k ] for k in range ( 3 ) ] [ 2 ] [ 1 ] )
2

答案 1 :(得分:0)

让我们从基础开始。

[2 * [k] for k in range(3)] 
== [2*[0], 2*[1], 2*[2]] 
== [[0,0], [1,1], [2,2]]

[[0,0],[1,1],[2,2]] [2] = [2,2]

[2,2][1] = 2

所以

print( [ 2 ∗  [k]  for k in range(3) ][ 2 ][ 1 ] )

输出(当你将星号固定为python解析的正确字符时):

2

如果这一切看起来像黑魔法,您可能想尝试查看here以获取更多关于列表推导的信息。