如何从列表中删除''?

时间:2017-12-28 09:36:46

标签: python-2.7

我想从列表中删除'',它会给我IndexError:list out of range

我也尝试过new_string.remove('')

def func_name(new_string):
   for k in range(len(new_string)):
       if new_string[k] == '':
           new_string = new_string[:k] + new_string[k+1:]
   return new_string

print func_name(['Title','','This','is','a','link','.'])

print func_name(['','','Hello','World!','',''])

print func_name(['',''])

3 个答案:

答案 0 :(得分:2)

你应该尝试更加pythonic的方式,如:

def func_name(new_string):
    return [s for s in new_string if s != '']

print func_name(['Title','','This','is','a','link','.'])

print func_name(['','','Hello','World!','',''])

print func_name(['',''])

答案 1 :(得分:1)

您的问题是列表缩短了,但索引仍然被迭代,就像它是原始列表一样。

有更好的方法来实现这一点(请参阅其他答案),但为了修复您的实现,您可以按相反的顺序迭代,从而避免“溢出”:

def remove_empty(s):
   for k in reversed(range(len(s))):
       if s[k] == '':
           del s[k]

这仅适用于每次迭代时最多删除一个元素的情况。

请注意,这会改变s

>>> a = ['Title','','This','is','a','link','.']
>>> remove_empty(a)
>>> a
['Title','This','is','a','link','.']

答案 2 :(得分:0)

检查一个例子:

x = ["don't", '', 13] 

while '' in x:
    x.remove('')

assert x == ["don't", 13]