这听起来很简单,但我遇到了麻烦。我有一个包含一些值的列表,其中一些可能相似。如果两个或多个值彼此相似,我想删除其中一个值以外的所有值。例如对于列表 a,
a = [10, 45, 48, 120]
假设我想删除一个值,如果它与另一个值相似幅度为 5。在这种情况下,因此我想删除 45 或 48,这无关紧要。我可以设想找到每个元素与其他所有元素之间的绝对差异,即用自身循环遍历列表,并根据每个元素与其他所有元素之间的差异创建一个新列表,例如
import copy
a = [10,45,48,120]
a_new=[]
for val in a:
for val_ in a:
dif = abs(val-val_)
if dif == 0:
a_new.append(val_)
elif dif > 5:
a_new.append(val_)
a=copy.deepcopy(a_new)
a_new=[]
在这里,我尝试将结果反馈到循环中,但我没有得到我想要的结果。我得到:
a
[10,120]
我想要的是:
a
[10,45,120]
最佳答案
通过在代码执行时检查值,我们可以看到当 val = 45 和 val_ = 48 时,48 不会添加到 a_new。那么当 val = 48 时,a 不包含 48,因此 48 永远不会附加到 a_new,并且 48-45 < 3,因此 45 也不会附加到 a_new。
import copy
a = [10,45,48,120]
a_new=[]
for val in a:
print('outer loop: a: {}'.format(a))
for val_ in a:
dif = abs(val-val_)
if dif == 0:
a_new.append(val_)
elif dif > 5:
a_new.append(val_)
print('val: {:3d}, val_: {:3d}, dif: {:3d}, a: {}, a_new: {}'.format(val, val_, dif, a, a_new))
a=copy.deepcopy(a_new)
a_new=[]
outer loop: a: [10, 45, 48, 120]
val: 10, val_: 10, dif: 0, a: [10, 45, 48, 120], a_new: [10]
val: 10, val_: 45, dif: 35, a: [10, 45, 48, 120], a_new: [10, 45]
val: 10, val_: 48, dif: 38, a: [10, 45, 48, 120], a_new: [10, 45, 48]
val: 10, val_: 120, dif: 110, a: [10, 45, 48, 120], a_new: [10, 45, 48, 120]
outer loop: a: [10, 45, 48, 120]
val: 45, val_: 10, dif: 35, a: [10, 45, 48, 120], a_new: [10]
val: 45, val_: 45, dif: 0, a: [10, 45, 48, 120], a_new: [10, 45]
val: 45, val_: 48, dif: 3, a: [10, 45, 48, 120], a_new: [10, 45]
val: 45, val_: 120, dif: 75, a: [10, 45, 48, 120], a_new: [10, 45, 120]
outer loop: a: [10, 45, 120]
val: 48, val_: 10, dif: 38, a: [10, 45, 120], a_new: [10]
val: 48, val_: 45, dif: 3, a: [10, 45, 120], a_new: [10]
val: 48, val_: 120, dif: 72, a: [10, 45, 120], a_new: [10, 120]
outer loop: a: [10, 120]
val: 120, val_: 10, dif: 110, a: [10, 120], a_new: [10]
val: 120, val_: 120, dif: 0, a: [10, 120], a_new: [10, 120]
无需构建新列表,您只需删除不符合条件的值即可实现您的目标。
a = [10,45,48,120]
for val in a:
for val_ in a[1:]:
dif = abs(val - val_)
if dif > 0 and dif <= 5:
a.remove(val_)
关于list - Python - 如果元素与另一个元素相似,则从列表中删除该元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50991311/