print ( [ 2 ∗ [ k ] for k in range ( 3 ) ] [ 2 ] [ 1 ] )
上述代码的输出是什么?为什么输出我很困惑,不知道如何解决它
答案 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以获取更多关于列表推导的信息。