假设我有列表
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),但它没有按照我的意愿工作。
答案 0 :(得分:5)
为此任务使用两个for循环效率很低。相反,您应该使用list comprehension和str.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是一个很好而且简单的方法来完成同样的事情,而且麻烦要少得多。我只是想首先弄清楚出了什么问题。希望这有帮助!