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