1

我试图在任意列表中找到丢失的数字。在有序列表中,我的代码工作正常,但在任意列表中不起作用。这是我的代码:

a = [10,12,13,8]
b = [x for x in range(a[0], a[-1] + 1)]
a = set(a)
print(list(a ^ set(b)))

输出是:

[8, 10, 12, 13]

但是当a被排序时,输出结果很好:

[9,11]

我的代码有什么问题,我该如何解决?PS。我知道我可以对列表进行排序并解决问题,但我希望它也可以在任意列表上工作。

4

4 回答 4

2

这个怎么样:

a = [10, 12, 13, 8]
b = set(range(min(a), max(a)+1))
print(set(a).symmetric_difference(b))
于 2018-09-16T12:29:31.767 回答
1

正如评论中的 Aran-Fey 指出我明显的错误,问题已经解决。解决方案:

a = [10,12,13,8]
b = [x for x in range(min(a), max(a) + 1)]
a = set(a)
print(list(a ^ set(b)))
于 2018-09-16T12:29:07.037 回答
1

尝试更改b为:

b = [x for x in range(min(a), max(a) + 1)]

您假设这a[0]是最小的项目并且a[-1]是最大的,这可能是错误的。

作为旁注,您不需要列表理解:

b = list(range(min(a), max(a) + 1))
于 2018-09-16T12:29:07.493 回答
1

如果你替换a[0]a[-1]into range,你将有

b = [x for x in range(10, 9)]
print(b)

返回

[]

因此,您在 list 中没有任何价值b

于 2018-09-16T12:29:11.007 回答