Python通过不均匀的lis对元组列表进行排序

2024-10-02 08:18:48 发布

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

我有一副牌是由以下代码组成的:

import itertools

suits = "DCHS"
ranks = "23456789TJQKA"

cardDeck = list(set(itertools.product(ranks, suits)))

我想把这副牌按等级分类。 执行排序(cardDeck,key=lambda x:x[0])按字母顺序(23456789AJKQT)对列表进行排序,但我想找到一种方法来保持列顺序(23456789TJQKA)。你知道吗

我一直在尝试为key=参数获取一个lambda函数,该函数将遍历ranks字符串中的字符,但到目前为止我遇到了困难。也许我需要制作一个字符列表而不是字符串?你知道吗


Tags: lambdakey函数字符串代码import列表排序
3条回答
ranks = "23456789TJQKA"

values = {'T': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14}

cardDeck.sort(key=lambda c: int(c[0]) if '2' <= c[0] <= '9' else values[c[0]])

为什么不直接按照等级字符串中卡片等级的索引排序呢。你知道吗

例如,“A”是12个元素,“K”是第11个元素。因此,王者之后才是王者。
导入itertools

suits = "DCHS"
ranks = "23456789TJQKA"

cardDeck = list(set(itertools.product(ranks, suits)))

print sorted(cardDeck, key = lambda x: ranks.index(x[0]))

输出

[('2','S'),('2','C'),('2','H'),('2','D'),('3','D'),('3','H'),('3','C'),('3','S'),('4','D')。。。你知道吗

您的ranks列表中已经有了排名。在你的分拣机上使用:

print sorted(cardDeck, key=lambda x: ranks.index(x[0])) 

您可以看到full thing here

import itertools

suits = "DCHS"
ranks = "23456789TJQKA"

cardDeck = list(set(itertools.product(ranks, suits)))

print sorted(cardDeck, key=lambda x: ranks.index(x[0])) 

提供:

[('2', 'S'), ('2', 'C'), ('2', 'H'), ('2', 'D'), ('3', 'D'), ('3', 'H'), ('3', 'C'), ('3', 'S'), ('4', 'D'), ('4', 'S'), ('4', 'C'), ('4', 'H'), ('5', 'H'), ('5', 'S'), ('5', 'D'), ('5', 'C'), ('6', 'C'), ('6', 'D'), ('6', 'H'), ('6', 'S'), ('7', 'C'), ('7', 'D'), ('7', 'S'), ('7', 'H'), ('8', 'S'), ('8', 'C'), ('8', 'H'), ('8', 'D'), ('9', 'H'), ('9', 'S'), ('9', 'D'), ('9', 'C'), ('T', 'H'), ('T', 'C'), ('T', 'D'), ('T', 'S'), ('J', 'S'), ('J', 'C'), ('J', 'H'), ('J', 'D'), ('Q', 'H'), ('Q', 'C'), ('Q', 'D'), ('Q', 'S'), ('K', 'S'), ('K', 'H'), ('K', 'D'), ('K', 'C'), ('A', 'S'), ('A', 'D'), ('A', 'H'), ('A', 'C')]

相关问题 更多 >

    热门问题