列表索引超出范围:python

2024-09-27 19:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含这些元素的列表(列表由str(elements)组成):

['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15']

我想把它处理成这样的输出

['-0', '1#', '15#']

如果元素是-x,我想把它留在那里,所以我取最后2个元素,如果间隙是1,那么在最后一个元素之前移除元素。 代码如下:

            for k in range(len(l1)):
                if "-" in (l1[-k] or l1[-k-1]):
                    print("debuggggg")
                    pass
                elif(int(l1[-k]) - int(l1[-k-1])== 1 and int(l1[-k]) - int(l1[-k-2])== 2) :
                    a= l1[-2]
                    print(a)
                    l1.remove(a)
                    #print("debug 2")
                elif(int(l1[-k]) - int(l1[-k-1])== 1):
                    a= l1[-2]
                    l1.remove(a)
                    l1[-2] = l1[-2] +"#"
                    l1[-1] = l1[-1] +"#"
                    print("3")
                #elif(type(l1[-2]) is str):
                    #pass

问题在于:

 debuggggg
    14
    13
    12
    11
    10
    9
    8

最后两个元素不包含char“-”,但似乎它们包含char“-”。 此外,在8循环脚本崩溃之后:

 elif(int(l1[-k]) - int(l1[-k-1])== 1 and int(l1[-k]) - int(l1[-k-2])== 2) :
IndexError: list index out of range

但它并没有超出清单的范围。有什么问题?你知道吗


Tags: andin元素l1列表rangepasselements
3条回答

您应该有一个迭代的源列表和一个插入元素的结果列表。你知道吗

source_list = ['-1', '1', '2', '3']
results_list = []

for item in source_list:
    # Do some tests, and put items into the results list if you want them.
    # I think this is what you want, although I couldn't understand from your question.
    if '-' in item:
        results_list.append(item)
    else:
        results_list.append(item + '#')

如果有其他的要求,那么让我知道,我会尝试调整我的例子。你知道吗

你的第二个问题

but it is not out the range of the list. What is the problem?

这只是超出范围的错误。你知道吗

l1[-len(l1)-1]

引发此错误。您正在代码中执行此操作。你知道吗

for k in range(len(l1)):
    ...
    elif(int(l1[-k]) - int(l1[-k-1])== 1 and int(l1[-k]) - int(l1[-k-2])== 2) :#<--here(l1[-k-2])

您正在从列表中删除项。如果从包含10个项目的l1开始,那么k将从0变为9,但是如果从l1中删除一个项目,那么l1[9]就不再存在。你知道吗

我还认为if "-" in (l1[-k] or l1[-k-1]):是在测试"-"是否在l1[-k]l1[-k-1]的逻辑或中,我认为这不是你想要的?你知道吗

相关问题 更多 >

    热门问题