从列表列表中提取第n个元素

时间:2019-06-14 07:59:32

标签: python

我有一个列表列表,我想从每个子列表中提取第n个元素。例如,给出以下列表:

my_list = [[[0, 0], [1, 1]], [[2, 0], [3, 2]], [[2, 0], [3, 3]], [[4, 0], [5, 4]], [[6, 0], [7, 5]]]

我想提取所有保留原始列表(列表列表的列表)结构的前几个元素,例如:

all_first_elements = [[[0],[1]], [[2],[3]], [[2],[3]], [[4],[5]], [[6],[7]]]

问题类似于this one,但有一个附加的嵌套列表。

我尝试过all_first_elements = [item[0] for item in my_list],但是它返回列表列表的第一个元素(而不是列表列表的第一个元素)。

5 个答案:

答案 0 :(得分:3)

您可以在列表理解中使用double for循环

all_first_elements = [[[item_1[0]] for item_1 in item_0] for item_0 in my_list]

输出将为

[[[0], [1]], [[2], [3]], [[2], [3]], [[4], [5]], [[6], [7]]]

答案 1 :(得分:1)

enumerate()函数为可迭代对象添加计数器。

因此,对于游标中的每个元素,使用(counter, element)生成一个元组。

my_list = [[[0, 0], [1, 1]], [[2, 0], [3, 2]], [[2, 0], [3, 3]], [[4, 0], [5, 4]], [[6, 0], [7, 5]]]

for sub_list in my_list:
    for index,elm in enumerate(sub_list):
        sub_list[index] = [elm[0]]

print(my_list)

O / P:

[[[0], [1]], [[2], [3]], [[2], [3]], [[4], [5]], [[6], [7]]]

答案 2 :(得分:1)

如果您愿意使用numpy,则可以使用以下方法切片和编制索引:

import numpy as np

np.array(my_list)[:, :, [0]]

[出]

array([[[0],
        [1]],

       [[2],
        [3]],

       [[2],
        [3]],

       [[4],
        [5]],

       [[6],
        [7]]])

如果需要将结果作为列表,只需链接.tolist方法即可:

np.array(my_list)[:, :, [0]].tolist()

[出]

[[[0], [1]], [[2], [3]], [[2], [3]], [[4], [5]], [[6], [7]]]

答案 3 :(得分:0)

尝试一下:

let list = [

  {
    master: "Leo",
    review: [{
        name: 'Bob',
        stars: 2
      },
      {
        name: 'Elly',
        stars: 4
      },

    ]

  },
  {
    master: "Emily",
    review: [{
        name: 'Greg',
        stars: 3
      },
      {
        name: 'Joe',
        stars: 2
      },

    ]

  },

]

for (let i = 0; i < list.length; i++) {
  if (list[i].master === 'Emily') {
    alert(list[i].review.name)
  }
}

输出

all_first_elements = [[[i[0][0]],[i[1][0]]] for i in my_list]

答案 4 :(得分:0)

这是一个通用的解决方案,如果嵌套级别更改,您将不必更新:

z

对于原始问题中提供的示例,您将这样称呼它:

def extract(data, level, index):
    result = []

    if level == 0:
        return data[index]

    for elem in data:
        result.append(extract(elem, level-1, index))

    return result

请注意,为清楚起见,我排除了数据验证检查,因为我不确定您的数据可能如何变化。例如,处于第n级深度的列表可以为空,也可以不为空。