mb5*_*567 3 python list duplicates python-3.x
我有两个清单:
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]
Run Code Online (Sandbox Code Playgroud)
我试图删除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]
Run Code Online (Sandbox Code Playgroud)
我发现很难制定问题并遍历列表,我不知道如何使用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]
Run Code Online (Sandbox Code Playgroud)
有3个步骤:
tuple必须可以清洗的键.defaultdict键,映射到您,list以便您有一个列表列表而不是元组列表.map与min.字典是在Python 3.6+中排序的,这可以在3.7+中依赖.在早期版本中,您可以依赖于顺序之间的一致性,dd.keys并且dd.values在访问键和值之间不会发生任何操作.