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

标签 python list indices del

为了正视它,我尝试遍历 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/

相关文章:

python - S4cmd 给予权限被拒绝错误

python - 计算列表 Python 中有多少个对象类型

python - 将一个列表转换为集合,但如果为空,则使用默认列表

java - groovy/java 检查列表交集并组合元素

php - 优化 MySQL XML 解析性能

python - pip - 在 vi​​rtualenv 中安装 matplotlib

python - 在 Python 中打印字典列表中键的值

algorithm - 这种类型的二进制搜索有名称吗?

python - python中使用pop()、list[-1]和+=时的求值顺序是什么?

python - 从字典中获取值索引