2017-12-28 28 views
0

I「のリストから、それは私にはIndexError与える:範囲''をリストから削除するにはどうすればよいですか?

のうちリストは、私が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

チェック例:

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

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

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

複雑さはO(n^2) – Elazar

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

インデックスの繰り返しを変更しないでください。 Pythonにはこのための準備ツールがあります。 removeに電話をしてValueErrorという商品を見つけたら、ValueErrorに電話することができます。

In [1]: my_list = ['a', 'b', '', ' ', 'qwerty', '', 'z', '', 123] 

In [2]: my_list.remove(2) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-2-02b08a66ea7c> in <module>() 
----> 1 my_list.remove(2) 

ValueError: list.remove(x): x not in list 

In [3]: try: 
    ...:  while True: 
    ...:   my_list.remove('') 
    ...: except ValueError: 
    ...:  print my_list 
    ...:  
['a', 'b', ' ', 'qwerty', 'z', 123] 
1

あなたの問題は、リストが短縮されていることですが、それは元のリストだかのようにインデックスがまだ繰り返します。

あり、これを実現するためのより良い方法は、(他の回答を参照)ですが、あなたの実装を修正するために、あなたは、このように「オーバーフロー」を回避逆の順番で繰り返すことができます:あなたの場合は

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

これだけ作品を各反復で最大でも1つの要素を削除します。

これは、sが変わったことに注意してください。

>>> a = ['Title','','This','is','a','link','.'] 
>>> remove_empty(a) 
>>> a 
['Title','This','is','a','link','.'] 
関連する問題