2024-04-26 01:34:44 发布
网友
我想知道是否有任何方法可以删除列表中的索引。例如,给定[[1,2,3],[4,5,6],[7,8,9]],我想删除每个列表的第一个元素,使其成为[[2,3],[5,6],[8,9]]。我可以做一个for循环来慢慢删除它们,但我想知道是否有一个更有效的方式来这样做
[[1,2,3],[4,5,6],[7,8,9]]
[[2,3],[5,6],[8,9]]
对于小的list如您的示例中所示,执行类似list.pop(0)的操作是可以的:
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[1:]
inner.pop(0)
一种解决方法是使冗余元素显示为最后一个元素而不是第一个元素,这样您就可以执行inner.pop(),从而删除最后一个元素。这样就不需要再移位/复制了
inner.pop()
另一种解决方案是将数据结构从list切换到^{}(“双端队列”)。这有一个popleft()方法,它相当于pop(0),但是很快,因为deque支持从两端快速弹出:
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]]
[[2, 3], [5, 6], [8, 9]]
我想你有两个选择
您可以使用pop():
pop()
for item in list: item.pop(0)
或重新创建新列表:
list2 = [item[1:] for item in list]
对于小的
list
如您的示例中所示,执行类似list.pop(0)
的操作是可以的:但是,由于
list
基本上是作为数组(指针)实现的,删除第一个元素意味着所有其他元素必须向后移动一个,如果list
很大,则会导致大量(指针)复制。另外,使用inner[1:]
而不是inner.pop(0)
也不能解决问题,因为inner[1:]
会创建一个新的list
而不是返回一个视图一种解决方法是使冗余元素显示为最后一个元素而不是第一个元素,这样您就可以执行
inner.pop()
,从而删除最后一个元素。这样就不需要再移位/复制了另一种解决方案是将数据结构从} (“双端队列”)。这有一个
list
切换到^{popleft()
方法,它相当于pop(0)
,但是很快,因为deque
支持从两端快速弹出:您可以通过遍历列表来完成,然后调用内部列表上的pop()函数。这将删除指定索引处的元素
输出:
[[2, 3], [5, 6], [8, 9]]
我想你有两个选择
您可以使用
pop()
:或重新创建新列表:
相关问题 更多 >
编程相关推荐