没有一组指令,但我基本上必须编写def hasNoDuplicate
的代码,并且当list没有重复时,它会返回True
。这就是我写的,我是编程的新手所以所有这一切都非常压倒性的。我不确切地知道在if
语句中放什么。任何建议都会有所帮助!
def hasNoDuplicates(values):
foundCounterExampleYet = False
for value in values:
if():
foundCounterExampleYet = True
return not(foundCounterExampleYet)
答案 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}}