对两个以完全相同的方式相互引用的列表(Integer和Card对象列表)进行排序



这个问题看起来像另一个stackerflow问题:是否可以用完全相同的方式对两个列表(相互引用(进行排序?

对我来说,这个问题的解决方案是行不通的。错误:TypeError: '<' not supported between instances of 'Card' and 'Card'

我有两个Python列表。列表1存储卡的出现次数。列表2存储卡对象。下面是一个例子。这些列表彼此直接引用。列表已经根据卡片的等级进行了排序(从大到小,从王牌到平分(。

cardCountList = [1, 1, 3, 3, 2]
cardList = [aceCardObject, queenCardObject, tenCardObject, eightCardObject, deuceCardObject]

我想要的是根据卡片CountList中的数字对两个列表进行排序。但重复数字的顺序必须保持不变。因此最终结果应该是:

cardCountList = [3, 3, 2, 1, 1]
cardList = [tenCardObject, eightCardObject, deuceCardObject, aceCardObject, queenCardObject]

下面的代码给了我错误:

cardCountList, cardList  = zip(*sorted(zip(cardCountList, cardList )))
cardCountList, cardList  = (list(t) for t in zip(*sorted(zip(cardCountList, cardList ))))

您可以执行以下操作:

cardCountList = [1, 1, 3, 3, 2]
cardList = "ace queen ten eight deuce".split()
cardCountList, cardList = map(
list, 
zip(*sorted(zip(cardCountList, cardList), key=lambda x: x[0], reverse=True))
)

这将两个列表压缩在一起,根据第一个元素对结果对进行排序,然后将它们重新打包。

cardCountList
# [3, 3, 2, 1, 1]
cardList
# ['ten', 'eight', 'deuce', 'ace', 'queen']

最新更新