根据元组的第二部分在python中从元组列表中移除

问题描述:

contacts.remove((name,ip))根据元组的第二部分在python中从元组列表中移除

我拥有ip并且它是唯一的。我想根据ip从联系人中删除这个元组,并且不需要命名。

我刚试过这个contacts.remove((pass,ip)),但是我遇到了一个错误。

+1

'pass'是一个语句,因此不能以这种方式表达式中使用。而“无”是一个实际值,所以它也不起作用。 – 2010-05-17 23:10:34

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声明在其脚下移动地毯而绊倒。

由于ip删除是独一无二的,你并不需要有关修改你迭代一个容器中的所有常用的注意事项 - 因此,最简单的方法就变成了:

for i, (name, anip) in enumerate(contacts): 
    if anip == ip: 
    del contacts[i] 
    break 

这个回答我不能创造了问题。感谢您的解释,但让我总结和概括多个缺失的答案和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) 

The corresponding help topic