Python索引错误(意外)列表追加函数



谁能告诉我为什么这段代码给我一个索引错误?如有任何帮助,不胜感激。

def remove_adjacent(nums):
    new = []    
    for i in range(0, (len(nums)-1)):
        if nums[i] != nums[(i+1)]:
            new.append(nums[i])
    new.append(nums[-1]) #this is what causes the index error
    return new

正如jonrsharpe所说,您的remove_adjacent函数错过了一个条件:nums是空的listtuple或某些数组类型支持按索引随机访问。

你必须处理最后一个元素(nums[-1]),特别是因为在你的算法中,最后一个元素之后没有元素可以比较。

我想也许这是一个更干净的方式来实现remove_adjacent功能:

def remove_adjacent(nums):
    new = []    
    for i in nums:
        if not new or new[-1] != i:
            new.append(i)
    return new

这样,您就不需要特别处理最后一个元素

如果将空序列传递给@ remove_nearby,则此操作将失败。像remove_adjacent ([])

看,我刚刚重写了一遍

def remove_adjacent(nums):
    new = []    
    for i in range(0, len(nums)-1):
        if nums[i] != nums[(i+1)]:
            new.append(nums[i])
    if len(nums):new.append(nums[-1]) # it works
    return new

要完全避免这个问题,并使其适用于任何可迭代对象,而不仅仅是序列,您可以使用itertools.groupby():

from itertools import groupby

def remove_adjacent(items):
    return [item for item, _ in groupby(items)]

最新更新