如果列表有重复,如何返回布尔语句?

时间:2014-11-09 03:04:43

标签: python

如何使用列表False中的True循环等来返回forl的代码?

我是否应该使用计数器来计算重复数?我以为我可以使用点计数表示法来计算它们的重复数量。如果计数超过2,则会返回False

l = [1, 2, 2, 3, 4, 4]

def allDifferent1D(l):
    for i in l:
        print(l.count(i))
        if l.count(i) > 1:
            return False

现在回来了:

1
2

4 个答案:

答案 0 :(得分:4)

看到一组值,并在看到重复后立即返回False

def all_different(l):
    seen = set()
    for i in l:
        if i in seen:
            return False
        seen.add(i)
    return True

简化就是一次创建set()并测试长度;较短的一组意味着有重复。这做了更多工作;对于大型列表,上述方法更有效,因为它短路;一找到副本就立即返回False

请注意,您的计数方法每次都会扫描列表 ,您创建了一个二次算法;将元素添加到列表时,工作量会相乘。

答案 1 :(得分:3)

试试这个,这是一个更简单的方法,不需要显式循环 - 它使用的事实是,根据定义,一个集合不允许重复。如果列表和集合具有相同数量的元素,那是因为没有重复项开头:

def allDifferent1D(lst):
    return len(lst) == len(set(lst))

如果False列表中有重复项,则上述函数将返回lst;如果所有元素都是唯一的,则上述函数将返回True,并且不需要对输入列表进行排序。例如:

allDifferent1D([1, 2, 2, 3, 4, 4])
=> False
allDifferent1D([1, 2, 3, 4, 5, 6])
=> True

答案 2 :(得分:0)

这种方法将产生具有O(nlogn)复杂性和O(1)空间的解决方案。

当您对列表进行排序时,重复的值应该是邻居,而不使用集合来存储我们已经看过的项目,我们可以使用O(1)-space算法。

当我们对元素进行排序时(假设Python使用最佳排序算法),复杂度为O(nlogn)。我们遍历列表,在最坏的情况下,我们遍历所有列表O(n)。所以在这种情况下,我们有O(nlogn)复杂度算法。

l = [1,2,2,3,4,4]

def isDup(l):
    l=sorted(l)
    index=0
    isFound=False
    while not isFound and index<len(l)-2:
        if l[index+1]==l[index]:
            isFound=True
        else:
            index+=1
    return isFound

print isDup(l)

答案 3 :(得分:0)

这里简单的一个:

 >>> def dup_check(l):
         return sorted(l) == sorted(set(l))

 >>> dup_check([1,2,3,8,1])
 False
 >>> dup_check([1,2,3,8,])
 True

set将删除重复,如果列表没有重复,则排序(l)==已排序(set(l))将返回True else False