Non-unique Elements

Question:

你将得到一个含有整数(X)的非空列表。在这个任务里,你应该返回在此列表中的非唯一元素的列表。
要做到这一点,你需要删除所有独特的元素(这是包含在一个给定的列表只有一次的元素)。
解决这个任务时,不能改变列表的顺序。
例如:[12313] 1和3是非唯一元素,结果将是 [1, 3, 1, 3]。

输入:一个含有整数的列表。

输出:一个含有不唯一元素的整数列表。

范例:

        checkio([1, 2, 3, 1, 3]) == [1, 3, 1, 3]
        checkio([1, 2, 3, 4, 5]) == []
        checkio([5, 5, 5, 5, 5]) == [5, 5, 5, 5, 5]
        checkio([10, 9, 10, 10, 9, 8]) == [10, 9, 10, 10, 9]

code 1:

def checkio(data: list) -> list:
    lenth = len(data)
    list = []
    for i in range(lenth):
        for j in range(lenth):
            if i == j:
                continue
            else:
                if data[i] == data[j]:
                    list.append(data[i])
                    break
    return list

code 2:

def checkio(data: list) -> list:
    lenth = len(data)
    list = []
    for i in range(lenth):
        count=data.count(data[i])
        if count != 1:
            list.append(data[i])
            
    return list

code 3:(from checkio users: eiji

def checkio(data):
        return [i for i in data if data.count(i) > 1]

code 4: (from checkio users: odwl)

def checkio(data):
    uniques = set()
    dupes = set()
    for x in data:
        if x in uniques: dupes.add(x)
        else: uniques.add(x)    
    return [x for x in data if x in dupes]

总结:

code1,code2以及code3总体上看,算法思想基本相同,但code3更为简洁。而code4虽然看上去不如code3简洁,但四个程序中,它的算法时间复杂度最低,最为有效。code4的算法时间复杂度为o(n),其它的都为o(n*2).

猜你喜欢

转载自blog.csdn.net/u011656377/article/details/80214697