测试没有重复元素的列表

时间:2014-12-08 20:51:14

标签: python duplicates python-3.3

没有一组指令,但我基本上必须编写def hasNoDuplicate的代码,并且当list没有重复时,它会返回True。这就是我写的,我是编程的新手所以所有这一切都非常压倒性的。我不确切地知道在if语句中放什么。任何建议都会有所帮助!

def hasNoDuplicates(values):
    foundCounterExampleYet = False
    for value in values:
        if():
            foundCounterExampleYet = True
    return not(foundCounterExampleYet)

2 个答案:

答案 0 :(得分:2)

def hasNoDuplicates(values):
    foundCounterExampleYet = False
    value = None
    while values:
       value = values.pop()
       if value in values:
           foundCounterExampleYet = True
           break
    return not(foundCounterExampleYet)

现在你得到:

>>> hasNoDuplicates([1,2,3])
True
>>> hasNoDuplicates([1,2,3,4,6,7,8,9,4])
False
>>> 

这段代码的作用是,它接受输入列表,逐一取出列表中的最后一个元素,并检查列表中是否存在该项。如果存在,则检测到重复,并且它会更改foundCounterExampleYet的值,从而跳出循环。这种检查发生,直到列表变空。 while values表示在列表不为空时执行此操作

pop方法取出列表中的最后一个元素。但它有副作用,这意味着它改变了初始输入的值:

>>> [1,2,3].pop()
3
>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]

答案 1 :(得分:0)

你走在正确的轨道上。您可以在set循环输入时将值存储在in中,并使用set运算符检查def hasNoDuplicates(values): currentValues = set() # initialize an empty set for value in values: # iterate over your inputs if value in currentValues: # if the current value is in your set, there is a duplicate return False else: currentValues.add(value) # no duplicate exists, add it to the set return True # If it made it through all the values, there were no duplicates 中的成员资格。请查看我的评论以及以下代码。

values

为了好玩,有一种更简单的方法可以做到这一点。如果set序列中的项目是可清除的,您可以从整个序列中生成set。由于根据定义,set可能没有任何重复项,如果原始序列的长度与set的长度相同,则所有项都是唯一的。如果def hasNoDuplicates(values): return len(values) == len(set(values)) 更短,则至少有一个副本。

{{1}}