为什么不列出[:] [0]给我列表的第一行?

时间:2017-02-11 02:14:40

标签: python list row

对于以下内容:

list=[[2, 3, 5], [7, 8, 9]]

为什么[list[0][0], list[1][0]]代表第一行([2,7]),但命令list[:][0]list[0:2][0]会返回第一列([2,3,5])?

我看到list[:][0]的方式应该得到第一个参数(即0和1)的所有可能值,第二个参数得到0,这意味着它将返回第一行。相反它的作用是返回第一列,我无法理解为什么。

1 个答案:

答案 0 :(得分:1)

在python中,[a:b:c]语法创建一个新列表。也就是说,

list = [1,2,3]
print(list[:])

将打印一个列表,而不是值。

因此,当您说list[:][0]时,您正在复制原始列表(list[:]),然后访问其中的第0项。

当然你知道,原始列表的第0项(list[0])是另一个列表。

我想你想要:

[sl[0] for sl in list]

<强>精化:

这被称为“理解”。它是一种紧凑的特殊语法,用于通过处理或过滤其他迭代来生成列表,dicts和元组。基本上是{..},[..]和(..),其中的表达式涉及for和可选的if。当然,你可以有for的倍数(如[x代表y中的y代表y])和if的倍数。

在你的情况下,很明显你想要一个清单。所以[]。您想通过从每个子列表中获取第一个项目来制作列表。所以[sl[0] for sl in list]

这是一篇更详细的文章:http://carlgroner.me/Python/2011/11/09/An-Introduction-to-List-Comprehensions-in-Python.html