从嵌套列表中提取子列表的第一个和最后一个元素

4

如何从嵌套列表中提取每个子列表的第一个和最后一个元素?

例如:

x=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(x)
#[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

期望的结果-

[[1, 3], [4, 6], [7, 9]]

这是我见过的最接近的-

a = [x[i][i] for i in (0, -1)]
print(a)
#[1, 9]
6个回答

11

你的想法是正确的。如果你的列表中的嵌套列表只有一层深度,你可以使用列表推导式和-1索引来访问第一个和最后一个元素,就像你试图做的那样:

a = [[sublist[0],sublist[-1]] for sublist in x]

输出:

>>> a
[[1, 3], [4, 6], [7, 9]]

3

以下是如何使用列表切片的方法:

x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
x = [l[::len(l)-1] for l in x]
print(x)

输出:

[[1, 3], [4, 6], [7, 9]]

1
x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> [a[:1] + a[-1:] for a in x]
[[1, 3], [4, 6], [7, 9]]


我提取了两个切片,一个包含第一个元素,一个包含最后一个元素,并将它们连接在一起。
即使子列表长度不同,也可以正常工作。

0
我建议这样做。 list[-1] 语法用于获取列表中的最后一个元素,这正是您想要的。
x=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for elem in x:
    print(elem[0], elem[-1])

这只是以标准格式打印它们,但按照这个顺序将它们放回到一个新列表中将会很简单。


0

这个有效:


x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for item in x:
    print(item[0], item[2])

如果您想要精确的结果,请使用以下代码:


x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = []
for item in x:
    new_list.append([item[0], item[2]])

print(new_list)


1
最好不要硬编码子列表的长度,而是使用item[-1]。 - Derek O

0
你可以循环遍历列表并从中访问它们:
x=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

out = []
for arr in x:
    out.append([arr[0], arr[-1]])

print(out)

输出:

[[1, 3], [4, 6], [7, 9]]

此外,您可以使用列表推导式:
out = [[arr[0], arr[-1]] for arr in x]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接