从列表中的字符串中删除字母

时间:2013-11-09 17:56:45

标签: python string python-2.7

假设我有列表

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'对象没有属性'remove' 所以,我在第二个循环之前尝试了列表(i),但它没有按照我的意愿工作。

3 个答案:

答案 0 :(得分:5)

为此任务使用两个for循环效率很低。相反,您应该使用list comprehensionstr.replace

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

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

答案 1 :(得分:4)

最有效的方法是使用translate

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

<强>输出

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

答案 2 :(得分: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是一个很好而且简单的方法来完成同样的事情,而且麻烦要少得多。我只是想首先弄清楚出了什么问题。希望这有帮助!