gpt4 book ai didi

Python:删除满足特定条件的所有列表索引

转载 作者:太空狗 更新时间:2023-10-30 02:49:39 26 4
gpt4 key购买 nike

为了正视它,我尝试遍历 python 中的坐标对列表并删除其中一个坐标为负的所有情况。例如:

数组中:

map = [[-1, 2], [5, -3], [2, 3], [1, -1], [7, 1]]

我想删除其中任一坐标为 < 0 的所有对,留下:

map = [[2, 3], [7, 1]]

我的问题是 python 列表不能有任何间隙,所以如果我这样循环:

i = 0
for pair in map:
for coord in pair:
if coord < 0:
del map[i]
i += 1

当元素被删除时,所有索引都会移动,从而打乱迭代并导致各种问题。我试过将坏元素的索引存储在另一个列表中,然后遍历并删除这些元素,但我遇到了同样的问题:一旦一个元素消失,整个列表就会发生变化,索引将不再准确。

有什么我想念的吗?

谢谢。

最佳答案

如果列表不大,那么最简单的方法就是新建一个列表:

In [7]: old_map = [[-1, 2], [5, -3], [2, 3], [1, -1], [7, 1]]

In [8]: new_map=[[x,y] for x,y in a_map if not (x<0 or y<0)]

In [9]: new_map
Out[9]: [[2, 3], [7, 1]]

如果您想丢弃其他对,您可以使用 old_map = new_map 进行跟进。

如果列表太大,创建一个大小相当的新列表是个问题,那么您可以就地从列表中删除元素——诀窍是先从尾端删除它们:

the_map = [[-1, 2], [5, -3], [2, 3], [1, -1], [7, 1]]
for i in range(len(the_map)-1,-1,-1):
pair=the_map[i]
for coord in pair:
if coord < 0:
del the_map[i]

print(the_map)

产量

[[2, 3], [7, 1]]

附言。 map是一个非常有用的内置 Python 函数。最好不要将变量命名为 map,因为这会覆盖内置变量。

关于Python:删除满足特定条件的所有列表索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7163406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com