2024-04-20 02:08:44 发布
网友
例如,给定列表['one', 'two', 'one'],算法应返回True,而给定['one', 'two', 'three'],算法应返回False。
['one', 'two', 'one']
True
['one', 'two', 'three']
False
这是旧的,但这里的答案让我找到了一个稍微不同的解决方案。如果你准备滥用理解力,你可能会这样短路。
xs = [1, 2, 1] s = set() any(x in s or s.add(x) for x in xs) # You can use a similar approach to actually retrieve the duplicates. s = set() duplicates = set(x for x in xs if x in s or s.add(x))
建议仅用于短列表:
any(thelist.count(x) > 1 for x in thelist)
不要在长列表上使用它——它可能需要与列表中项目数的平方成正比的时间!
对于具有哈希项(字符串、数字和c)的较长列表:
def anydup(thelist): seen = set() for x in thelist: if x in seen: return True seen.add(x) return False
如果你的项目是不可散列的(子列表,dict等),它会变得更加毛茸茸的,尽管如果它们至少是可比的,仍然有可能得到O(N logN)。但您需要知道或测试项目的特性(是否可散列、可比较或不可比较),才能获得最佳性能--对于散列,为O(N),对于不可散列的可比较,为O(N logn),否则它将降为O(N平方),对此我们无能为力:-(。
如果所有值都是可散列的,则使用set()删除重复项:
set()
>>> your_list = ['one', 'two', 'one'] >>> len(your_list) != len(set(your_list)) True
这是旧的,但这里的答案让我找到了一个稍微不同的解决方案。如果你准备滥用理解力,你可能会这样短路。
建议仅用于短列表:
不要在长列表上使用它——它可能需要与列表中项目数的平方成正比的时间!
对于具有哈希项(字符串、数字和c)的较长列表:
如果你的项目是不可散列的(子列表,dict等),它会变得更加毛茸茸的,尽管如果它们至少是可比的,仍然有可能得到O(N logN)。但您需要知道或测试项目的特性(是否可散列、可比较或不可比较),才能获得最佳性能--对于散列,为O(N),对于不可散列的可比较,为O(N logn),否则它将降为O(N平方),对此我们无能为力:-(。
如果所有值都是可散列的,则使用
set()
删除重复项:相关问题 更多 >
编程相关推荐