筛选元组中的重复项-Python

时间:2020-02-14 16:12:40

标签: python-3.x tuples

我正在尝试创建一个函数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"

2 个答案:

答案 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
相关问题