Удаление координат из списка на python

Я создал список, полный "координат" в Python: L1 = [(1,2), (5,6), (-1, -2), (1, -2) и т.д.].

Если бы я хотел удалить все элементы в списке, содержащие отрицательные числа, как бы это сделать?

Я пробовал:

for (a,b) in L1:
  if a < 0 or b < 0:
    L1.remove(a,b)

Но он не работает. Был бы очень признателен за любую помощь.

Джек

Ответ 1

Вы не можете что-то изменить, пока вы его итерации. Результаты являются странными и контр-интуитивными, и почти никогда не то, что вы хотите. Фактически, многие коллекции явно запрещают это (например, sets и dicts).

Вместо этого перебирайте копию (для e в файле [:]:...) или вместо изменения существующего списка фильтруйте ее, чтобы получить новый список, содержащий нужные вам элементы ([e для e в если...]). Обратите внимание, что во многих случаях вам не нужно снова итерации фильтровать, просто объединить фильтрацию с генерацией данных.

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

L1 = L2
print L1

Ответ 2

Вы можете фильтровать, используя понимание списка:

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