谁能告诉我为什么这段代码给我一个索引错误?如有任何帮助,不胜感激。
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
是空的list
或tuple
或某些数组类型支持按索引随机访问。
你必须处理最后一个元素(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)]