对于以下内容:
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,这意味着它将返回第一行。相反它的作用是返回第一列,我无法理解为什么。
答案 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