我有一个包含 100 个字符串值的元组(比方说)。现在,我想检查元组中的两个字符串元素是否相同?
我试着用嵌套循环做这样的事情:
def hasDuplicates(arr: tuple):
ctr = 0
# arr looks something like this & len(arr) == 100
# arr = ('abc', 'bcd', 'sdf', 'abc', 'pqr', ...)
for m in arr:
for n in arr:
if n == m:
ctr += 1
# while looping, len(arr) times every element
# will be compared with itself
if ctr > len(arr):
return True
return False
...这行得通,但我认为有更好的解决方法。谁能为此提供更好的解决方案? :)
请您参考如下方法:
如果我没理解错的话,你可以将你的元组转换成一个集合并检查它是否与原始元组具有相同的长度。
def has_duplicates(iterable):
l = list(iterable) # in case iterable is an iterator
return len(set(l)) != len(l)
演示:
>>> tup = ('abc', 'bcd', 'sdf', 'abc', 'pqr')
>>> has_duplicates(tup)
>>> True
>>> has_duplicates(range(100))
>>> False
不适用于无限迭代器:)
~编辑~
一个更通用的版本,它不必预先构建一个可能很长的list 和set:
def has_duplicates(iterable):
seen = set()
for x in iterable:
if x in seen:
return True
seen.add(x)
return False
当然,这两个版本都要求您的可迭代对象的元素是可哈希的。
