удалить из списка кортежей по второй части кортежа в python - PullRequest
3 голосов
/ 18 мая 2010

contacts.remove((name,ip))

У меня есть IP, и он уникален. Я хочу удалить этот кортеж из контактов в соответствии с IP-адресом и не нужно называть имя.

Я только что попробовал это contacts.remove((pass,ip)), но я столкнулся с ошибкой.

Ответы [ 3 ]

11 голосов
/ 18 мая 2010
contacts = [(name, ip) for name, ip in contacts if ip != removable_ip]

или

for x in xrange(len(contacts) - 1, -1, -1):
    if contacts[x][1] == removable_ip:
        del contacts[x]
        break # removable_ip is allegedly unique

Первый метод связывает contacts с недавно созданным списком, который исключает желаемую запись. Второй метод обновляет исходный список; он идет назад, чтобы не быть сбитым с толку оператором del, перемещающим коврик под ноги.

4 голосов
/ 18 мая 2010

Поскольку удаляемое ip уникально, вам не нужны все обычные меры предосторожности при изменении контейнера, для которого вы выполняете итерацию - таким образом, самый простой подход становится следующим:

for i, (name, anip) in enumerate(contacts):
  if anip == ip:
    del contacts[i]
    break
1 голос
/ 08 июня 2014

Это отвечает на мой не созданный вопрос. Спасибо за объяснение, но позвольте мне обобщить и обобщить ответы для множественного удаления и Python 3.

list = [('ADC', 3),
        ('UART', 1),
        ('RemoveMePlease', 42),
        ('PWM', 2),
        ('MeTooPlease', 6)]

list1 = [(d, q)
         for d, q in list
         if d not in {'RemoveMePlease', 'MeTooPlease'}]

print(list1)

for i, (d, q) in enumerate(list):
    if d in {'RemoveMePlease', 'MeTooPlease'}:
        del(list[i])

print(list)

Соответствующий раздел справки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...