我想知道是否可以删除列表中列表中的索引。例如,给定[[1,2,3],[4,5,6],[7,8,9]]
,我想删除每个列表的第一个元素,使其变为[[2,3],[5,6],[8,9]]
。我可以执行for循环来慢慢删除它们,但我想知道是否有更有效的方法?
答案 0 :(得分:1)
您可以通过遍历列表来完成此操作,然后在内部列表上调用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]]
答案 1 :(得分:0)
我想您有两种选择。
您可以使用pop()
:
for item in list:
item.pop(0)
或重新创建一个新列表:
list2 = [item[1:] for item in list]
答案 2 :(得分: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.pop()
来删除最后一个元素。这样就不需要进一步的移位/复制了。
另一种解决方案是将数据结构从list
切换到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!