2013-11-09 33 views
0

去除串字母可以說我有列表在列表

x = [ 'apple', 'orange', 'grape','strawberry'] 

我想從單詞列表中移除x刪除字母「E」,或返回一個新的列表,它應該是這樣的

['appl', 'orang', 'banana', 'grap', 'strawbrry'] 

我已經試過這樣:

for i in x: 
    for z in i: 
     if z == 'e': 
      i.remove(z) 

,我得到我預期的錯誤:AttributeError的:「海峽」對象有沒有屬性「刪除」 所以,我在第二個循環之前嘗試了列表(i),但它沒有按照我的意願工作。

回答

4

最有效的方式做到這一點是使用translate

x = [ 'apple', 'orange', 'grape','strawberry'] 
print [fruit.translate(None, 'e') for fruit in x] 

輸出

['appl', 'orang', 'grap', 'strawbrry'] 
+0

謝謝! ! –

+0

@ O-plus如果您覺得我的回答對您有幫助,您可以[接受我的回答](http://meta.stackexchange.com/a/5235/204922):-) – thefourtheye

+0

對不起我在這裏絕對是noob –

5

對此任務使用兩個for-loop效率不高。相反,你應該使用list comprehensionstr.replace

>>> x = ['apple', 'orange', 'grape', 'strawberry'] 
>>> [y.replace('e', '') for y in x] 
['appl', 'orang', 'grap', 'strawbrry'] 
>>> 

這種方法過濾列表中的好和有效的項目。

0

無論是以前的答案的解決你的問題,但我只是想弄清楚爲什麼你的方法不起作用。基本上,你告訴python將一個字符串視爲一個表,它只能在一定程度上做到。默認情況下,Python不會「看」字符串是由組件組成的,所以它不能只是刪除字符串的一部分,除非你改變了Python看它的方式(即切片或列表())。如果你使用迭代器,你可以像這樣做你的代碼,並實際上把你的字符串變成一個列表,然後再回來。

for i in x: 
a = len(i) 
for z in i: 
    if z == 'e': 
     b = 0 
     i = list(i) 
     i.remove(z) 
     word = str() 
     while b <= a: 
      word = word + i[b] 
      i = word 
      b = b + 1 

我沒有測試過這個,但代碼明智,它的工作原理。正如你所看到的,這是很多代碼來完成一個非常簡單的任務,我完全同意iCodez的說法,str.replace是一個很好而簡單的方法,可以用更少的麻煩來完成同樣的任務。我只是想首先澄清什麼是錯的。希望這可以幫助!

+0

謝謝你解釋;但是我測試了你的方法,它工作 –