通过使用整数值对数组进行重复数据删除

Array deduplicate it by using integer value

我有一个小问题,但不确定如何正确解决:

如果我们有数组 = ["123.56","444.56","444.34","444"]

去重的方法是什么 return:

潜在规则是:

我设法让它工作:

import math
def second_smallest(numbers:list):
    numbers.sort()
    if len(numbers)==1:
        return numbers[0]
    else:
        return numbers[1]
l1=["123.56","444.56","444.34","444"]
l2=[float(j) for j in l1]
l1=list(set([int(math.trunc(float(j))) for j in l1]))
l2=[[float(x) for x in l2 if str(x).startswith(str(i))] for i in l1]
for i,j in enumerate(l2):
    l1[i]=str(second_smallest(j))
print(l1)

这是我想出的:

def dedupe(numbers):
    a  = sorted(numbers)
    b = [int(float(x)) for x in a]
    c = []
    for n in b:
        if b.count(n) > 1:
            if float(a[b.index(n)]).is_integer():
                c.append(a[b.index(n) + 1])
            else:
                c.append(a[b.index(n)])
        else:
            c.append(a[b.index(n)])
    return list(set(c))

我不知道它是否是最优的,但它似乎有效。

可能不是最佳解决方案,但效果很好

l = ["123.56","444.56","444.34","444"]
fl = []
groups = {i.split(".")[0] for i in l}
l = [float(i) for i in l]
groups = [float(g) for g in groups]
# print(l)
# print(groups)
for g in groups:
    gl = [i for i in l if g<=i<g+1]
    if len(gl)>1:
        gl.sort()
        al = [i for i in gl if i>g][0]
        fl.append(al)
    else:
        fl.append(gl[0])
print(fl)

输出:

[123.56, 444.34]