我有一个列表列表,我想从每个子列表中提取第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]
,但是它返回列表列表的第一个元素(而不是列表列表的第一个元素)。
答案 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级深度的列表可以为空,也可以不为空。