【问题标题】:Python: list index out of range while iterating over a list [using del]Python:迭代列表时列表索引超出范围[使用del]
【发布时间】:2018-12-27 07:29:12
【问题描述】:

我在尝试迭代此列表时遇到了以下问题。列表中删除了一个参数,但迭代的停止是相同的。我试图在代码末尾添加n-1,但这并没有什么区别。

我还是一个新手,所以任何解释或帮助将不胜感激。

string_intrare = [['Gheorghe', 'Gita', '8', '7', '5.5', '10'],
['Vuia', 'Vasile', '4', '10', '10', '10'],
['Andreescu', 'Andra', '9', '10', '9', '10'],
['Elenescu', 'Elena', '5', '5', '5', '5']]
n = 4


for i in range(0,n):
    if (float(string_intrare[i][2]) < 5) or (float(string_intrare[i][3]) < 5) or (float(string_intrare[i][4]) < 5) or (float(string_intrare[i][5]) < 5):
        del string_intrare[i]
        print('List ' + str(i) + ' has been removed remove' + ' ===== Grade lower than 5')

Traceback (most recent call last):
  File ".\note_bacalaureat.py", line 16, in <module>
    if (float(string_intrare[i][2]) < 5) or (float(string_intrare[i][3]) < 5) or (float(string_intrare[i][4]) < 5) or (float(string_intrare[i][5]) < 5):
IndexError: list index out of range

【问题讨论】:

    标签: python-2.7 list del


    【解决方案1】:

    发生这种情况是因为如果 'if' 条件评估为真,则列表项之一被删除并且列表的大小现在减小但 n 仍然相同并且 for 循环继续迭代 n 次。

    使其工作的一种可能方法是:

    string_intrare = [['Gheorghe', 'Gita', '8', '7', '5.5', '10'],['Vuia', 'Vasile', '4', '10', '10', '10'],['Andreescu', 'Andra', '9', '10', '9', '10'],['Elenescu', 'Elena', '5', '5', '5', '5']]
    n = 4
    
    
    for i in string_intrare:
        if (float(i[2]) < 5) or (float(i[3]) < 5) or (float(i[4]) < 5) or (float(i[5]) < 5):
            print('List ' ,i , ' has been removed remove' , ' ===== Grade lower than 5')
            string_intrare.remove(i)
    

    【讨论】:

    • 我明白这一点,但我一直在努力解决这个问题
    • 我已经编辑了答案并添加了替代工作代码
    • 感谢您的回答,我离问题的解决又近了一步。不过,这不会删除列表元素。
    • 感谢您指出这一点。 'del' 按索引删除项目,因此不起作用。另一方面,“删除”按值从列表中删除项目。编辑后的解决方案现在可以工作了。
    • 如果你只想使用'del',你可以这样做 - del string_intrare[string_intrare.index(i)]
    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2019-04-30
    • 1970-01-01
    • 2014-12-02
    • 2010-12-20
    相关资源
    最近更新 更多