我正在尝试创建一个函数non_duplicates()
,该函数将筛选给定元组x
的重复项,如果存在重复项则返回False
,或者返回{{1} }(如果没有)。
我正在通过嵌套在另一个循环中的True
循环来对这些项目进行两次迭代,以将所有项目相互比较。我添加了一个条件,该条件检查两个项目是否相等,而它们的索引不相等。
问题是由于某种原因,代码为不同的项目赋予了相等的for
,在这种情况下,我确保索引与迭代链接。
index
的答案与non_duplicates(((0,0),(0,0)))
相同,两者都给出了non_duplicates(((0,0),(5,5)))
,而前者则不应给出。
当我选中True
时,索引为((0,0),(0,0))
,而对于"0,0 0,0 0,0 0,0"
,索引为((0,0),(5,5))
。
这就是为什么不满足条件的原因。
"0,0 0,1 1,0 1,1"
答案 0 :(得分:1)
如果我对问题的理解正确,则可以尝试:
def non_duplicates(x):
return len(set(x)) == len(x)
答案 1 :(得分:0)
这里的答案与@Matt Shin的答案使用相同的逻辑,但也适用于元组的元组,例如您的示例节目的检查对象。
def non_duplicates(x):
sorted_tuples = []
for item in x:
# sort every tuple in a tuple of tuples and returns a list of sorted tuples
sorted_tuples.append(tuple(sorted(item)))
# checks for duplicates using set
return len(set(sorted_tuples)) == len(sorted_tuples)
print(non_duplicates(((0,0),(0,0))))
print(non_duplicates(((0,0),(5,5))))
或者如果您的元组的元组确实很大,并且您很在意计算时间。您可以检查添加的每个元素。
def non_duplicates(x):
sorted_tuples = set()
for count, item in enumerate(x, 1):
sorted_tuples.add(tuple(sorted(item)))
if len(sorted_tuples) != count:
return False
return True