我有两个清单:
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函数。任何帮助表示赞赏!
这是使用的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个步骤:
tuple
作为键,键必须是可哈希的。defaultdict
键并映射到list
,即可获得列表列表而不是元组列表。map
与一起使用min
。字典在Python 3.6+中是按插入顺序排序的,而在3.7+中可以依赖。在较早的版本中,您可以依靠顺序之间的一致性,dd.keys
并且dd.values
前提是键和值的访问之间没有进行任何操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句