从二维列表中给定相同坐标的列表中选择最小值

mb567

我有两个清单:

a = [[9, 5], [9, 10000], [9, 10000], [5, 10000], [5, 10000], [10001, 10], [10001, 10]]
b = [19144.85, 8824.73, 26243.88, 23348.02, 40767.17, 55613.43, 40188.8]

我正在尝试删除a中的重复坐标并删除b中的相邻值,但要保留最小值。因此,例如,坐标[9,10000]用b中的8824.73和26243.88重复两次,结果应该是两个列表,其中只有一个[9,10000],b中的较小者是8824.73。

因此,总体结果应如下所示:

aa = [[9,5],[9,10000],[5,10000],[10001,10]]
bb = [19144.85, 8824.73, 23348.02, 40188.8]

我发现很难提出问题并遍历列表,并且不确定如何使用zip函数。任何帮助表示赞赏!

pp

这是使用的O(n)解collections.defaultdict

from collections import defaultdict

dd = defaultdict(list)

for (key1, key2), value in zip(a, b):
    dd[(key1, key2)].append(value)

aa = list(map(list, dd))
bb = list(map(min, dd.values()))

print(aa, bb, sep='\n'*2)

[[9, 5], [9, 10000], [5, 10000], [10001, 10]]

[19144.85, 8824.73, 23348.02, 40188.8]

说明

共有3个步骤:

  1. 创建一个字典,将每对键映射到值列表。小心使用tuple作为键,键必须是可哈希的。
  2. 对于唯一键,只需提取您的defaultdict键并映射到list,即可获得列表列表而不是元组列表。
  3. 要获取最小值,请map与一起使用min

订购注意事项

字典在Python 3.6+中是按插入顺序排序的,而在3.7+中可以依赖。在较早的版本中,您可以依靠顺序之间的一致性dd.keys并且dd.values前提是键和值的访问之间没有进行任何操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章