Python索引错误(意外)列表追加功能

时间:2014-07-19 08:59:24

标签: python list python-2.7 append

有人可以告诉我为什么这段代码会给我一个索引错误? 非常感谢任何帮助。

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

2 个答案:

答案 0 :(得分:0)

如果你将空序列传递给@remove_adjacent,这将失败。喜欢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

答案 1 :(得分:0)

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

from itertools import groupby


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