2017-04-27 45 views
0

我需要寫我自己的函數來接受一個列表,如果列表包含指定的字符,那麼這個字符將被刪除。這是我的。編寫一個函數來從列表中刪除一個字符?

def deleteElement(self,x): 
    length = len(self.elements) 
    print length 
    for i in range(length): 
     if (self.elements[i] == x): 
      del self.elements[i] 

但是,這不斷產生索引超出界限的錯誤,但我不知道爲什麼會發生這種情況。

+0

可能是因爲您的列表有重複,所以你的索引每次成功移除一個元素需要改變1。想想看。 –

+0

'length = len(self.elements)'總會給你一個索引超出範圍。如'列表[1,2]'將具有''的len' 2'但沒有2 – Cfreak

+0

@Cfreak索引,這不是原因,他從'從'0變爲於長度範圍(長度)'迭代1' –

回答

0

你可以做到這一點,如果你是細心保存多少項目已被刪除的軌道,並相應地調整你的指標:

In [91]: def deleteElement(elements,x): 
    ...:  offset = 0 
    ...:  length = len(elements) 
    ...:  for i in range(length): 
    ...:   if elements[i - offset] == x: 
    ...:    del elements[i - offset] 
    ...:    offset += 1 
    ...: 

In [92]: elements = [1, 2, 3, 1, 2, 3, 1, 2, 3] 

In [93]: deleteElement(elements, 1) 

In [94]: elements 
Out[94]: [2, 3, 2, 3, 2, 3] 
0
#Can I suggest a different method? 
def deleteElement(self,x): 
    self.elements = [e for e in self.elements if e!=x] 
0

黃金法則說,不要在你循環的時候修改列表。您可以使用一個副本,如果必要:

def deleteElement(self,x): 
    length = len(self.elements) 
    temp = self.elements[:] 
    print length 
    for i in range(length): 
     if (self.elements[i] == x): 
      del temp[i] 
    self.elements = temp[:] 
相關問題