所以我有一些清单:
shape1 = [[0, 0], [0, 100], [100, 100], [100, 0]]
shape2 = [[300, 300], [300, 450], [450, 450], [450, 300]]
list1 = [shape1, shape2]
height_y = [100, 150]
所以我想根据它们的高度(从大到小)对形状进行排序。对height_y列表进行排序非常容易,但是高度是基于与相同位置相关的形状。因此,如果我对height_y进行排序,我如何对list1进行排序,以便在排序后形状移动到与height_y列表相同的位置?但是,我不希望形状列表中的点的排列发生变化。
结束目标:
height_y = [150, 100]
list1 = [shape2, shape1]
注意:我这里只使用两个形状(由点定义),但我希望它能够处理任意数量的形状(超过一百个)。
答案 0 :(得分:5)
只需zip
em并排序。
In [489]: list1, height_y = map(list, (zip(*sorted(zip(list1, height_y), key=lambda x: x[1], reverse=True))))
In [490]: list1
Out[490]: [shape2, shape1] # shortened for aesthetic purposes (it's a list of lists)
In [491]: height_y
Out[491]: [150, 100]
故障:
zip(list1, height_y)
:将它们压缩在一起
sorted(---(1)---, key=lambda x: x[1], reverse=True)
:根据每个元组中的第一个值(高度)对元组进行反向排序
zip(*---(2)----)
:解压缩元组,得到两个元组的列表
map(list, ---(3)---)
:将元组列表转换为列表列表
答案 1 :(得分:1)
如果你只有形状和高度。我建议使用字典,然后按值分类:
import operator
dict = {}
sorted_dict = sorted(dict.items(), key=operator.itemgetter(1))