【发布时间】:2021-02-22 12:42:58
【问题描述】:
以两个列表(或数组)为例:
J = [1.0, 1.0, 1.0, 2.0, 3.0, 4.0, 4.0, 5.0]
B = [0.7, 0.8, 0.9, 6.0, 7.0, 0.5, 0.6, 8.0]
我的最终目标:如果 J 的任何元素相同,则应删除重复值,只出现一个。此外,应该对 B 中的相应元素索引元素进行平均,这会留下两个可能更小的列表,但没有重复的 J 值。如果没有相同的元素,那么列表当然应该保持不变。对于上面的示例,1.0 重复了 3 次,因此相应的 B 值(0.7、0.8 和 0.9)应该对所有三个进行平均。同样,4.0 被复制了两次,因此 0.5 和 0.6 应该取平均值。
想要的结果:
J_desired = [1.0, 2.0, 3.0, 4.0, 5.0]
B_desired = [0.8, 6.0, 7.0, 0.55, 8.0]
我尝试了基于 J 中元素之间差异的方法,并研究了映射/列表理解。我尝试了一种方法,将 J 中的不同元素组合在一起,然后将 B 中的相应元素组合在一起,然后对列表中的每个元组进行平均,但我不明白如何在两者之间进行映射。任何帮助,将不胜感激!列表从不庞大,但我想不出一种“Pythonic”的方式来解决这个问题。
如果没有重复项,或者元素也适用于更大的列表,任何方法都应该可以,例如:
J = [1.0, 1.0, 1.0, 0.25860967184801387, 0.17227115716753025, 0.17227115716753025, 0.17227115716753025, 0.13078583765112264, 0.10352331606217618, 0.0835587219343696, 0.0835587219343696, 0.0835587219343696, 0.06857858376511226, 0.06857858376511226]
B = [0.0, 0.03622632071144814, 0.07245264142289629, 3.550179423214222, 6.194700815988386, 6.230927136338296, 6.267153456688205, 8.875448558035552, 11.519969979732812, 14.092038724576383, 14.128265044926295, 14.164491365276204, 16.700333825923735, 16.736560146273646]
【问题讨论】:
-
所以基本上为
B中的每个值定义一个容差,平均这些值,并获得第一个列表中相应j值的平均值? -
或几乎相反;对于所有相等的
j值,用这些值对应的b索引的平均值来表示其中之一? -
反之;如果 J 值足够接近,则对这些值进行平均,并将相应的 B 值与这些值进行平均
-
生病尝试使用一些代码来看看我能做什么:)
-
@Ironkey 是第一条评论的正反,而不是第二条
标签: python arrays python-3.x list list-comprehension