Python中的列表索引无法按预期工作

时间:2014-02-02 19:41:57

标签: python python-2.7

我在Python中创建了一个列表,如下所示

gona = [[1,5,6],[3,7,10]]

这是一份清单。我想要做的是在两个内部列表中获得第二个条目。我试着跟随。

gona[:][1] 

但这给了我第二个清单。

[3,7,10]

当我按如下方式更改订单时,

gona[1][:]

它给出了相同的结果。这是什么原因?怎么能做我上面说的话? 我在Windows 7中使用Python 2.7.3。我也在Ubuntu 13.10中使用Python 2.7.5进行了尝试。

3 个答案:

答案 0 :(得分:2)

使用列表理解:

[g[1] for g in gona]

list[:]创建原始列表的完整切片副本,但这并不意味着“遍历此列表以进行下一个操作”。

Python列表对象可以包含任何类型的对象,没有切片语法允许您从列表推导中选择包含的列表对象,因为Python无法预先知道您只包含可索引对象。

也许你对numpy.array个对象感到困惑,可以做出这样的假设并实现更丰富的切片语法。

答案 1 :(得分:2)

如你所说,这是一份清单清单。没有简单的索引方法来获取两个内部列表中的第二个条目,因为列表不是以这种方式定向的(即,列式)。也就是说,外部列表不“知道”其内容是您想要获取其元素的其他列表。从外部列表中可以获得的只是内部列表之一。 (没有什么能保证每个内部列表都有第二个元素。你可以做gona = [[1], [], [1, 2, 3, 4, 5]]。)

你可以[row[1] for row in gona]

答案 2 :(得分:2)

如果你想在内部列表中获取一个元素一个默认值,如果该元素不存在,你可以使用它:

index = 1
[row[index] if len(row) > index else None for row in gona]  # None is the default value here