你好我只是想知道我的代码有什么问题。
这是本书中的一个问题' Think Python'要求写一个函数返回True是列表有任何重复元素,否则为False。
def has_duplicates(t):
for i in t:
if i in t.pop(t.index(i)):
return True
return False
答案 0 :(得分:3)
它有什么问题?
在迭代时,您可以从t
中删除元素。这可以防止迭代按预期工作,通常效果是跳过元素。不要这样做。
t.pop(t.index(i))
会返回i
(或等于它的值),所以无论您希望通过if i in
实现什么,我都不会想到你会实现的。
答案 1 :(得分:1)
您可以通过将列表的长度与从该列表创建的集合的长度进行比较来测试它,因为set会删除重复项。
def has_duplicates(t):
return len(t) > len(set(t))
答案 2 :(得分:0)
def has_duplicates(t):
no_dup = list(set(t))
if len(t) > len(no_dup):
return True
return False
答案 3 :(得分:-1)
首先,从不在迭代时篡改列表.. 其次,您的代码正在检查我是否= =您正在弹出的项目。这将永远是真实的,因为当你弹出一个项目时,python会返回你那个项目。所以将它与i进行比较是没有用的,因为你刚刚弹出我。这就像比较i == i .. 尝试使用t = [&#39; 1&#39;,&#39; 2&#39;,&#39; 3&#39;]的功能,并使用调试器来验证我在说什么.. < / p>
您可以执行以下操作,因为您无法使用集:
def has_duplicates(t):
#first have a backup to keep the iteration clean
t_backup = t.copy()
for i in t_backup:
#first pop the item
t.pop(t.index(i))
#then check if such item still exists
if i in t:
return True
return False
答案 4 :(得分:-2)
好吧,列表理解(感谢Steve Jessop):
>>>
True
>>>
结果:
.Select