2024-04-24 21:57:37 发布
网友
如何在不创建任何其他列表的情况下查找列表中的重复项?你知道吗
示例
A = [1,2,1,3,4,5,4]
最后
A = [1,4]
所以你想要一个函数,它接受一个列表,a,并对该列表进行变异,使之只包含那些最初被复制的元素?我假设创建新列表的限制适用于任何新集合。在询问有关算法的问题时,最好尽可能明确要求。你知道吗
这似乎是一个奇怪的要求,没有其他集合在这个算法中,但这是可能的。 一个简单但低效的解决方案是这样:
x
hasDuplicates
false
y
true
如果不创建另一个集合的限制可以放宽,或者如果算法的结果可以是一个新的列表而不是旧的列表被修改,那么您将找到更有效的方法来完成这一点。你知道吗
您可以使用^{}仅获取唯一值,然后从原始列表中逐个删除这些值,以便只保留重复的值:
a = [1,2,1,3,4,5,4] s = list(set(a)) for x in s: a.remove(x) print a # [1, 4]
我从Ritesh Kumar偷来的另一个优雅的选择是: 仅收集出现多次的项,使用set删除dup,并使用list将其包装以返回列表:
list
a = [1,2,1,3,4,5,4] print list(set([x for x in a if a.count(x) > 1])) # [1, 4]
我会去检查,对于每个元素,如果它出现在它之前,而不是之后。如果它不适合,那么要么它不是一个复制品,要么它是你不想保留的另一个复制品。不管是哪种情况,我们都不保留它。你知道吗
def simplify(a_list): for i in range(len(a_list) - 1, -1, -1): value = a_list[i] if not value in a_list[:i] or value in a_list[i+1:]: del a_list[i]
但不确定使用切片是否符合您的要求。你知道吗
用法:
>>> A = [1,2,1,3,4,5,4] >>> simplify(A) >>> A [1, 4] >>> A = [1,1,1,1,1,2,2,2,2] >>> simplify(A) >>> A [1, 2] >>> A = [1,1,1,1,1] >>> simplify(A) >>> A [1] >>> A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> simplify(A) >>> A []
所以你想要一个函数,它接受一个列表,a,并对该列表进行变异,使之只包含那些最初被复制的元素?我假设创建新列表的限制适用于任何新集合。在询问有关算法的问题时,最好尽可能明确要求。你知道吗
这似乎是一个奇怪的要求,没有其他集合在这个算法中,但这是可能的。 一个简单但低效的解决方案是这样:
x
hasDuplicates
到false
x
的每个元素,y
y
是x
的副本,请删除它并将hasDuplicates
设置为true
hasDuplicates
为false,则删除x
如果不创建另一个集合的限制可以放宽,或者如果算法的结果可以是一个新的列表而不是旧的列表被修改,那么您将找到更有效的方法来完成这一点。你知道吗
您可以使用^{} 仅获取唯一值,然后从原始列表中逐个删除这些值,以便只保留重复的值:
我从Ritesh Kumar偷来的另一个优雅的选择是:
仅收集出现多次的项,使用set删除dup,并使用
list
将其包装以返回列表:我会去检查,对于每个元素,如果它出现在它之前,而不是之后。如果它不适合,那么要么它不是一个复制品,要么它是你不想保留的另一个复制品。不管是哪种情况,我们都不保留它。你知道吗
但不确定使用切片是否符合您的要求。你知道吗
用法:
相关问题 更多 >
编程相关推荐