2014-06-25 61 views
0

我无法理解为什么我的代码无法工作。 我试图从在长度只有一个字符一个列表中删除的话:从列表中删除单个字符

line = ['word','a','b','c','d','e','f','g'] 
for words in line: 
    if len(words) == 1: 
     line.remove(words) 

此代码返回的(这看起来去除“所有其他”单个字符):

灿任何人都可以解释为什么这不能正常工作以及如何解决?

+3

很常见的错误。在迭代时不要修改列表。以下答案提供了实现预期结果的正确方法 – sshashank124

回答

5

这样做:

line = ['word','a','b','c','d','e','f','g'] 
line = [i for i in line if len(i) > 1] 

与您的代码的问题是,您是从列表中删除,而迭代这是不是安全的。它会改变列表的长度:

line = ['word','a','b','c','d','e','f','g'] 
iterated = 0 
removed = 0 
for words in line: 
    iterated += 1 
    if len(words) == 1: 
     line.remove(words) 
     removed += 1 

print line # ['word', 'b', 'd', 'f'] 
print iterated # 5 
print removed # 4