2010-05-17 67 views
3

contacts.remove((name,ip))根據元組的第二部分在python中從元組列表中移除

我擁有ip並且它是唯一的。我想根據ip從聯繫人中刪除這個元組,並且不需要命名。

我剛試過這個contacts.remove((pass,ip)),但是我遇到了一個錯誤。

+1

'pass'是一個語句,因此不能以這種方式表達式中使用。而「無」是一個實際值,所以它也不起作用。 – 2010-05-17 23:10:34

回答

11
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

由於ip刪除是獨一無二的,你並不需要有關修改你迭代一個容器中的所有常用的注意事項 - 因此,最簡單的方法就變成了:

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

這個回答我不能創造了問題。感謝您的解釋,但讓我總結和概括多個缺失的答案和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