如何删除列表中列表中的第一个元素?

2024-04-26 01:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有任何方法可以删除列表中的索引。例如,给定[[1,2,3],[4,5,6],[7,8,9]],我想删除每个列表的第一个元素,使其成为[[2,3],[5,6],[8,9]]。我可以做一个for循环来慢慢删除它们,但我想知道是否有一个更有效的方式来这样做


Tags: 方法元素列表for方式
3条回答

对于小的list如您的示例中所示,执行类似list.pop(0)的操作是可以的:

nested = [[1,2,3], [4,5,6], [7,8,9]]
for inner in nested:
    inner.pop(0)  # Remove first element of each inner list

但是,由于list基本上是作为数组(指针)实现的,删除第一个元素意味着所有其他元素必须向后移动一个,如果list很大,则会导致大量(指针)复制。另外,使用inner[1:]而不是inner.pop(0)也不能解决问题,因为inner[1:]会创建一个新的list而不是返回一个视图

一种解决方法是使冗余元素显示为最后一个元素而不是第一个元素,这样您就可以执行inner.pop(),从而删除最后一个元素。这样就不需要再移位/复制了

另一种解决方案是将数据结构从list切换到^{}(“双端队列”)。这有一个popleft()方法,它相当于pop(0),但是很快,因为deque支持从两端快速弹出:

import collections
nested = [[1,2,3], [4,5,6], [7,8,9]]
nested = [collections.deque(inner) for inner in nested]  # list of deques
for inner in nested:
    inner.popleft()  # Remove first element of each inner list, fast!

您可以通过遍历列表来完成,然后调用内部列表上的pop()函数。这将删除指定索引处的元素

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

for i in test_list:
    i.pop(0)

print(test_list)

输出:[[2, 3], [5, 6], [8, 9]]

我想你有两个选择

您可以使用pop()

for item in list:
    item.pop(0)

或重新创建新列表:

list2 = [item[1:] for item in list]

相关问题 更多 >