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

2024-07-04 05:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题看起来像另一个stackoverflow问题:Is it possible to sort two lists(which reference each other) in the exact same way?

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

我有两个Python列表。列表1存储卡的发生次数。列表2存储卡对象。下面我将举一个例子。这些列表相互直接引用。名单已经根据卡片的等级进行了排序(从大到小,从A到D)

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

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

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 ))))

1条回答
网友
1楼 · 发布于 2024-07-04 05:29:40

您可以执行以下操作:

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']

相关问题 更多 >

    热门问题