我已经在Python中创建了一个充满“坐标”的列表:L1 = [(1,2),(5,6),(-1,-2),(1,-2 )等等。]。从python列表中删除坐标
如果我想删除列表中包含负数的所有项目,我该怎么做?
我已经试过:
for (a,b) in L1:
if a < 0 or b < 0:
L1.remove(a,b)
但它无法正常工作。非常感谢任何帮助。
杰克
我已经在Python中创建了一个充满“坐标”的列表:L1 = [(1,2),(5,6),(-1,-2),(1,-2 )等等。]。从python列表中删除坐标
如果我想删除列表中包含负数的所有项目,我该怎么做?
我已经试过:
for (a,b) in L1:
if a < 0 or b < 0:
L1.remove(a,b)
但它无法正常工作。非常感谢任何帮助。
杰克
当你迭代它时你不能改变某些东西。结果很奇怪,反直觉,几乎从来没有你想要的。事实上,许多收藏明确地禁止这样做(例如套和字典)。
而是迭代一个副本(对于[:]中的e):或者,而不是修改现有列表,将其过滤以获取包含所需项目的新列表([e for in如果...])。请注意,在许多情况下,您不必再次迭代过滤,只需将过滤与数据生成合并即可。
L2 = []
for (a,b) in L1:
if a >= 0 and b >= 0:
L2.append((a,b))
L1 = L2
print L1
谢谢。非常有用的答案。 – Jack
可以筛选使用列表理解:
>>> coords = [(1, 2), (5, 6), (-1, -2), (1, -2)]
>>> [coord for coord in coords
... if not any(number < 0 for number in coord)]
[(1, 2), (5, 6)]
你怎么知道它是不是工作? –