高效确定列表中是否有两个相同的三个项目

3
什么是确定列表中恰好有两个元素相同的最有效方法?例如:
>>> has1dup(["one", "one", "two"])
True
>>> has1dup(["one", "two", "three"])
False
>>> has1dup(["one", "one", "one"])
False

我已经使用if/else语句成功完成了这个任务。然而,如果列表更大,为每对写出每种可能性的任务将变得非常困难和耗时。有没有更快/更简单的方法来完成这个任务?
以下是我尝试过的方法:
def has1dup(lst):
    if lst[0] == lst[1] and lst[1] != lst[2]:
        return True
    elif lst[1] == lst[2] and lst[2] != lst[0]:
        return True
    elif lst[0] == lst[2] and lst[2] != lst[1]:
        return True
    else:
        return False
12个回答

-1
def checkk(lis):
  sett=set(lis)
  for ele in sett:
     if lis.count(ele)==2:
       return 'yes'
  else:
     return 'no'


x=list(["one", "one", "two"])
y=list(["one", "two", "three"])
z=list(["one", "one", "one"])
w=list(["one", "two", "two"])
print(checkk(x))
print(checkk(y))
print(checkk(z))
print(checkk(w))

输出:

yes
no
no
yes

而对于 one/two/two,这样做会产生什么效果(当然,在修复缩进后)? - paxdiablo
@paxdiablo 缩进完美(对于for-else循环)。代码运行良好,我添加了一/两/两个解决方案,它返回“是”。 - Ashwini Chaudhary
for-else - 好吧,我从来不知道这样的东西甚至存在。+1 为了教育我。一个问题,为什么你不会无论如何都返回“no”(即放弃“else”行)? - paxdiablo
问题询问了关于恰好两个元素的情况,如果给定数组是 [1,1,2,2],你的代码会如何运作? - Akavall
@Akavall,问题的标题指定了三个中的两个。正文中还有一个关于如何处理更大列表的额外问题,但我仍然认为对主要问题的回答是有用的。这是我的想法,不过,就像我的妻子经常说的那样(并且没有太多的鼓励),我以前也犯过错误 :-) - paxdiablo
1
@paxdiablo 嗯,诀窍在于,在 for-else 循环中,只有当 for 循环成功完成(没有任何 break 或 return)时,else 部分才会运行。 - Ashwini Chaudhary

-2

你可以试试

list(["one", "one", "two"]).count("one") == 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接