Python 删除列表中与其他元素有很大差异的元素

Python 删除列表中与其他元素有很大差异的元素,python,list,filtering,Python,List,Filtering,Python寻求帮助 我有一个包含以下元素的列表 [[**287.5** 235.5 24.3] [**287.5** 297.5 24.3] [**287.5** 359.5 24.3] [ 56.5 151.5 25.4]] 我想删除[56.5151.5255.4],因为56.5与其他版本(287.5)有很大的不同。我想回到美国 [[287.5 235.5 24.3] [287.5 297.5 24.3] [287.5 359.5 24.3]] 我想了好

Python寻求帮助 我有一个包含以下元素的列表

[[**287.5** 235.5  24.3]
  [**287.5** 297.5  24.3]
  [**287.5** 359.5  24.3]
  [ 56.5 151.5  25.4]]
我想删除[56.5151.5255.4],因为56.5与其他版本(287.5)有很大的不同。我想回到美国

[[287.5 235.5  24.3]
  [287.5 297.5  24.3]
  [287.5 359.5  24.3]]

我想了好几个小时,但没有想出一个好主意,谁能帮上忙

如评论中所述,不清楚要求什么。您可能会问“如何选择三个列表的组合,以最大限度地减少每个列的可用性?”

在Python 3中有一种方法:

给定的

import itertools as it
import statistics as stats


a = [[287.5, 235.5,  24.3],
     [287.5, 297.5,  24.3],
     [287.5, 359.5,  24.3],
     [ 56.5, 151.5,  25.4]]
代码

def sum_of_variances(combs):
    """Return the sum of variances for the columns in each combination."""
    cols_per_combs = [list(zip(*x)) for x in combs]
    return [sum([stats.variance(col) for col in cols]) for cols in cols_per_combs]


def optimal_combination(lst):
    """Return the combination that minimizes the columnar variances."""
    combs = [x for x in it.combinations(lst, 3)]
    summed_vars = sum_of_variances(combs)
    idx = min(enumerate(summed_vars), key=lambda x: x[1])[0]
    return combs[idx]


optimal_combination(a)
# ([287.5, 235.5, 24.3], [287.5, 297.5, 24.3], [287.5, 359.5, 24.3])

详细信息

查找三个列表的所有组合:

通过压缩沿列查看所有组合:

>>> cols_per_combs = [list(zip(*x)) for x in combs]
>>> cols_per_combs
[[(287.5, 287.5, 287.5), (235.5, 297.5, 359.5), (24.3, 24.3, 24.3)],
 [(287.5, 287.5, 56.5), (235.5, 297.5, 151.5), (24.3, 24.3, 25.4)],
 [(287.5, 287.5, 56.5), (235.5, 359.5, 151.5), (24.3, 24.3, 25.4)],
 [(287.5, 287.5, 56.5), (297.5, 359.5, 151.5), (24.3, 24.3, 25.4)]]
我们计算列的方差,以度量每列中的值的不同程度。请注意,第一个选项(索引
0
)显示差异最小的列:

>>> variance_per_cols = [[stats.variance(col) for col in cols] for cols in cols_per_combs]
>>> variance_per_cols
[[0.0, 3844.0, 0.0],
 [17787.0, 5369.333333333333, 0.4033333333333317],
 [17787.0, 10949.333333333334, 0.4033333333333317],
 [17787.0, 11404.0, 0.4033333333333317]]
如果我们将这些差异相加,我们仍然可以看到哪个组合使这些差异最小化,即索引
0

>>> summed_vars = sum_of_variances(combs)
>>> summed_vars
[3844.0, 23156.736666666664, 28736.736666666668, 29191.403333333332]

optimal_composition()
返回使求和方差最小化的组合,即索引
combs[0]

如何定义巨大值?某些阈值可能是?需要澄清您的标准。您还应该发布有效的Python文本,这样愿意提供帮助的人就可以对您的代码进行c'n'p。也许您想删除每列中导致最大标准偏差的行?@HengShao欢迎您这样做。请提供一个答案。请看下面的帖子——根据你的例子推断出的答案。我鼓励你修改你的问题。确保示例在Python中运行。最后,在写作中明确你想要什么。
>>> summed_vars = sum_of_variances(combs)
>>> summed_vars
[3844.0, 23156.736666666664, 28736.736666666668, 29191.403333333332]