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

Python中的列表索引无法按预期工作,python,python-2.7,Python,Python 2.7,我用Python创建了一个列表,如下所示 gona = [[1,5,6],[3,7,10]] 这是一个列表列表。我想做的是在两个内部列表中获得第二个条目。我试着跟随 gona[:][1] 但这给了我第二个清单 [3,7,10] 当我改变顺序如下时 gona[1][:] 它给出了相同的结果。这是什么原因?怎样才能做到我上面所说的? 我正在Windows7中使用Python 2.7.3。我也曾在Ubuntu 13.10中的Python 2.7.5中尝试过这一点。使用列表理解: [g[1]

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

gona = [[1,5,6],[3,7,10]]
这是一个列表列表。我想做的是在两个内部列表中获得第二个条目。我试着跟随

gona[:][1] 
但这给了我第二个清单

[3,7,10]
当我改变顺序如下时

gona[1][:]
它给出了相同的结果。这是什么原因?怎样才能做到我上面所说的?
我正在Windows7中使用Python 2.7.3。我也曾在Ubuntu 13.10中的Python 2.7.5中尝试过这一点。

使用列表理解:

[g[1] for g in gona]
list[:]
创建原始列表的完整切片副本,这并不意味着“循环此列表以进行下一个操作”

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


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

使用列表理解:

[g[1] for g in gona]
list[:]
创建原始列表的完整切片副本,这并不意味着“循环此列表以进行下一个操作”

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


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

正如您所说,它是一个列表列表。没有简单的索引方法来获取两个内部列表中的第二个条目,因为列表的方向不是这样的(即,按列)。也就是说,外部列表不“知道”其内容是您想要获取其元素的其他列表。从外部列表中只能得到一个内部列表。(甚至没有任何东西可以保证每个内部列表都有第二个元素。您可以执行
gona=[[1],[1,2,3,4,5]]


您可以对gona中的行执行
[row[1]

正如您所说,这是一个列表列表。没有简单的索引方法来获取两个内部列表中的第二个条目,因为列表的方向不是这样的(即,按列)。也就是说,外部列表不“知道”其内容是您想要获取其元素的其他列表。从外部列表中只能得到一个内部列表。(甚至没有任何东西可以保证每个内部列表都有第二个元素。您可以执行
gona=[[1],[1,2,3,4,5]]


您可以对gona中的行执行
[行[1]

如果您希望在内部列表中获取元素,或者在元素不存在的情况下获取默认值,您可以使用以下方法:

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

如果要在内部列表中获取元素,或者在元素不存在的情况下获取默认值,可以使用以下方法:

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

您正在创建外部列表的副本,然后选择,或选择并创建内部列表的副本<代码>[:]不是一个循环。您可能混淆了Numpy数组切片和Python列表切片。如果
gona
是一个Numpy数组,则类似于
gona[:,1]
的内容将返回
[5,7]
。但这在Python列表中是不可能的,您必须在这里使用迭代`似乎我忘记了基本原理…谢谢。您正在创建外部列表的副本,然后选择,或者选择并创建内部列表的副本<代码>[:]不是一个循环。您可能混淆了Numpy数组切片和Python列表切片。如果
gona
是一个Numpy数组,则类似于
gona[:,1]
的内容将返回
[5,7]
。但这在Python列表中是不可能的,您必须在这里使用迭代`看来我忘记了基本原理…谢谢。