【问题标题】:Accessing elements in a nested list访问嵌套列表中的元素
【发布时间】:2014-12-17 09:16:05
【问题描述】:

我在一个名为“train_data”的嵌套列表中有元素,如示例中所示:

[0] [0.935897, 1.0, 1.0, 0.928772, 0.053629, 0.0, 39.559883, 0.009494, 0]
[1] [0.467681, 1.0, 1.0, 0.778987, 0.069336, 0.0, 56.571999, 0.024675, 0]
[2] [0.393258, 1.0, 1.0, 0.843201, 0.068779, 0.0, 66.866669, 0.069206, 1]

我想访问前 8 列的所有行(除了最后一列),以及只有最后一列的所有行。我需要在一行代码中不使用 for 循环。

我尝试过这样的事情:

print train_data[0][:]
print train_data[:][0]

但这给了我相同的结果:

[0.935897, 1.0, 1.0, 0.928772, 0.053629, 0.0, 39.559883, 0.009494, 0]
[0.935897, 1.0, 1.0, 0.928772, 0.053629, 0.0, 39.559883, 0.009494, 0]

有人可以帮帮我吗?

编辑:

抱歉,第一个查询的预期输出是:

[0.935897, 1.0, 1.0, 0.928772, 0.053629, 0.0, 39.559883, 0.009494]
[0.467681, 1.0, 1.0, 0.778987, 0.069336, 0.0, 56.571999, 0.024675]
[0.393258, 1.0, 1.0, 0.843201, 0.068779, 0.0, 66.866669, 0.069206]

第二个查询是:

[0]
[0]
[1]

【问题讨论】:

  • 预期输出是什么
  • 您应该使用numpy 数组,它提供多维切片,而不是嵌套列表。或者,[row[:-1] for row in train_data] 会得到你想要的。

标签: python list nested-lists


【解决方案1】:

您可以使用[:-1] slicing 来获取除最后一个之外的所有元素!

>>> l1=[0.935897, 1.0, 1.0, 0.928772, 0.053629, 0.0, 39.559883, 0.009494, 0]
>>> l2=[0.467681, 1.0, 1.0, 0.778987, 0.069336, 0.0, 56.571999, 0.024675, 0]
>>> l3=[0.393258, 1.0, 1.0, 0.843201, 0.068779, 0.0, 66.866669, 0.069206, 1]
>>> l=[l1,l2,l3]
>>> [i[:-1] for i in l]
[[0.935897, 1.0, 1.0, 0.928772, 0.053629, 0.0, 39.559883, 0.009494], [0.467681, 1.0, 1.0, 0.778987, 0.069336, 0.0, 56.571999, 0.024675], [0.393258, 1.0, 1.0, 0.843201, 0.068779, 0.0, 66.866669, 0.069206]]

【讨论】:

    【解决方案2】:

    真的有充分的理由在 oneliner 中执行此操作吗?我的意思是为什么这是一个要求?

    print [i[:-1] for i in l]  # All rows with all cols - 1
    print [i[-1] for i in l]  # All rows with last col
    

    但即使循环不是用 for 显式的,它也隐含为一个综合列表...

    edit: 1 → -1 表示第二行代码,我的错误

    【讨论】:

    • i[1] 是第二列,不是最后一列 => i[-1]
    【解决方案3】:

    我想你期待这个

    L1 = [x[0:-1] for x in train_data]
    L2 = [x[-1] for x in train_data]
    
    for x in L1:
        print x
    
    for x in L2:
        print [x]
    

    【讨论】:

      最近更新 更多