我想从列表中删除'',它会给我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(['',''])
答案 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]