通过使用整数值对数组进行重复数据删除
Array deduplicate it by using integer value
我有一个小问题,但不确定如何正确解决:
如果我们有数组 = ["123.56","444.56","444.34","444"]
去重的方法是什么 return:
- 发件人:
["123.56","444.56","444.34","444"]
- 收件人:
["123.56","444.34"]
潜在规则是:
将字符串转换为浮点数
- [123.56,444.56,444.34,444.0]
然后根据它的INTEGER去重,
- 基本上是这样对待的:
- 发件人:
[123.56,444.56,444.34,444.0]
- 收件人:
[123,444,444,444]
- 去重结果为:
-
[123,444]
- 但是现在通过使用上面的整数,我需要从组中得到最低的(+避免整数,但如果整数是唯一的来自该组,然后保留它,例如 444)
- 123 组 (123.56) = 最低 123.56
- 444 组 (444.56,444.34,444.0) = 最低 = 444.34(不是 444.0 !!!)
结果=["123.56","444.34"]
我设法让它工作:
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]
我有一个小问题,但不确定如何正确解决:
如果我们有数组 = ["123.56","444.56","444.34","444"]
去重的方法是什么 return:
- 发件人:
["123.56","444.56","444.34","444"]
- 收件人:
["123.56","444.34"]
潜在规则是:
将字符串转换为浮点数
- [123.56,444.56,444.34,444.0]
然后根据它的INTEGER去重,
- 基本上是这样对待的:
- 发件人:
[123.56,444.56,444.34,444.0]
- 收件人:
[123,444,444,444]
- 去重结果为:
-
[123,444]
- 但是现在通过使用上面的整数,我需要从组中得到最低的(+避免整数,但如果整数是唯一的来自该组,然后保留它,例如 444)
- 123 组 (123.56) = 最低 123.56
- 444 组 (444.56,444.34,444.0) = 最低 = 444.34(不是 444.0 !!!)
- 发件人:
- 基本上是这样对待的:
结果=
["123.56","444.34"]
我设法让它工作:
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]