【发布时间】:2020-07-05 14:49:31
【问题描述】:
我想要这个:
def compare_list(old, new):
new_set = set(new)
old_set = set(old)
return new_set - old_set, old_set - new_set, new_set & old_set
old = [1, 2, 3]
new = [5, 4, 2, 3]
added, deleted, unchanged = compare_list(old, new)
print("added: ", added)
print("deleted: ", deleted)
print("unchanged: ", unchanged)
added: {4, 5}
deleted: {1}
unchanged: {2, 3}
但这对我来说似乎效率很差。所以我想知道任何更有效的解决方案?还是内置函数?
【问题讨论】:
-
这对我来说似乎很优雅。您如何确定效率低下?
-
@MarkMeyer 抱歉,我用错了词。我想知道它可以通过for循环O(N)来实现
-
这个解决方案是 O(N)。同样,这个解决方案到底有什么问题?这是使用内置功能的直接方式。对我来说似乎很好。
-
@juanpa.arrivillaga 我正在尝试创建一个看起来像
WinMerge的查找差异软件,在我的程序中,有很多地方使用这个compare_list函数,它看起来像底部脖子给我。因此,我正在寻找一种有效的解决方案来提高性能。new_set - old_set, old_set - new_set, new_set & old_set似乎在做相关的过程。 -
@JustWe 列表中每个元素的取值范围是否有界限?