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: 'str' object has no attribute 'remove' 所以,我在第二个循环之前尝试了 list(i) 但它没有按我的意愿工作。

4

3 回答 3

5

对这个任务使用两个 for 循环是低效的。相反,您应该使用列表推导str.replace

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

此方法可以很好且有效地过滤列表中的项目。

于 2013-11-09T17:57:57.727 回答
4

最有效的方法是使用translate

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

输出

['appl', 'orang', 'grap', 'strawbrry']
于 2013-11-09T18:06:28.670 回答
0

前面的两个答案都解决了您的问题,但我只想弄清楚为什么您的方法不起作用。基本上,您是在告诉 python 将字符串视为表,它只能在一定程度上做到这一点。默认情况下,Python 不会“查看”字符串是由组件组成的,因此它不能只删除字符串的一部分,直到您更改 Python 看待它的方式(即切片或 list())。如果您打算使用迭代器,您可以像这样编写代码,然后实际上将您的字符串转换为列表并再次返回。

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 是一种很好且简单的方法,可以用更少的麻烦来完成同样的事情。我只是想首先弄清楚哪里出了问题。希望这可以帮助!

于 2013-11-09T18:54:23.250 回答