2016-10-21 79 views
0

我已经在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) 

但它无法正常工作。非常感谢任何帮助。

杰克

+1

你怎么知道它是不是工作? –

回答

2

当你迭代它时你不能改变某些东西。结果很奇怪,反直觉,几乎从来没有你想要的。事实上,许多收藏明确地禁止这样做(例如套和字典)。

而是迭代一个副本(对于[:]中的e):或者,而不是修改现有列表,将其过滤以获取包含所需项目的新列表([e for in如果...])。请注意,在许多情况下,您不必再次迭代过滤,只需将过滤与数据生成合并即可。

L2 = [] 
for (a,b) in L1: 
    if a >= 0 and b >= 0: 
    L2.append((a,b)) 

L1 = L2 
print L1 
+0

谢谢。非常有用的答案。 – Jack

1

可以筛选使用列表理解:

>>> 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)]