如果假设有一个空列表,有谁知道为什么这段代码不起作用。当我对空列表运行测试时,它给我索引错误,指出它超出范围。
def dedup(l):
dl = [l[0]]
for v in l[1:]:
if dl[-1] != v:
dl.append(v)
return dl
答案 0 :(得分:0)
如果列表为空,则 l[0]
不存在(没有第一个元素)。
您可以为此添加显式检查。
dl = [l[0]] if l else []
# or
if not l: return l
dl = [l[0]]
答案 1 :(得分:0)
这是因为在一个空列表中,您如何使用索引访问元素,因为其中没有元素。
当您使用 l[0] 时,将访问第一个元素。但是在空列表中没有第一个元素。因此错误的原因
答案 2 :(得分:0)
需要检查导入数组是否为空
if len(l) != 0:
答案 3 :(得分:0)
当有 0 或 1 时,我会测试这种情况并返回。
预计到达时间:当然 list(set()) 也有效。
def dedup(l):
if len(l) < 2:
return l
dl = [l[0]]
for v in l[1:]:
if dl[-1] != v:
dl.append(v)
return dl
print(dedup([1, 1, 11, 3]))
print(dedup([]))
print(list(set([1, 1, 11, 3])))
print(list(set([])))