Python 删除列表中与其他元素有很大差异的元素
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]] 我想了好
[[**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]