微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python3-将数组按特定顺序排序

如何解决Python3-将数组按特定顺序排序

我正在用Python 3写一个纸牌游戏(卡拉什尼科夫),我想对玩家的手进行排序。是否可以使用一种字典对手进行排序,以便重要卡片的顺序正确?我不知道会使用哪种方法

游戏的目的是在4张牌中获得A,K,4和7,因此我需要按照以下顺序将手中的牌排成一列:

  • A
  • K
  • 4
  • 7
  • [其他]

例如,如果原始手牌是3,K,7、2,则排序后的样子是:

  • K
  • 7
  • 3
  • 2 或:
  • K
  • 7
  • 2
  • 3

我当前的代码(简化为删除不必要的内容)是:

deck = shuffle()
print("Dealing",end="",flush=True)
    for i in range(4):
        print(".",end="")
        if player == 1:
            hand.append(deck.pop())
            oppHand.append(deck.pop())
        else:
            oppHand.append(deck.pop())
            hand.append(deck.pop())
        sleep(1.25)
    hand = sortHand(hand)
    oppHand = sortHand(oppHand)
    print(" [DONE]")

函数sortHand(hand)应该是什么?

解决方法

是否可以使用一种字典对手进行排序,以便重要卡片的顺序正确?我不知道会使用哪种方法。

Python的sorted内置函数(以及list.sort方法)具有一个key参数,这是您在这里需要的:key是一个可转换的函数将值放入用于排序的“等级”中,例如如果您为“ A”返回0,为“ K”返回1,则“ A”将在“ K”之前排序。

您可以只定义等级的字典,然后将其用作键:

import collections

ranks = collections.defaultdict(lambda: 5,{
    'A': 0,'K': 1,'4': 3,'7': 4,})
hand = list('3K72')
print('before',','.join(hand))
# => before 3,K,7,2
hand.sort(key=lambda card: ranks[card])
print(' after','.join(hand))
# =>  after K,3,2
,

实际上,您可以通过可选的key变量来利用标准的lib排序功能:

def priority(element):
if element == 'A':
    return -4
if element == 'K':
    return -3
if element == '4':
    return -2
if element == '7':
    return -1
return ord( element )

print(sorted(['1','4','K','7'],key=priority))
,

简短的一个:hand.sort(key='74KA'.find,reverse=True)

请注意,如果找不到该值,find将返回-1,因此它将字符A,K,4、7映射到(索引)3、2、1、0和所有其他-1。这与所需顺序相反,因此reverse=True将其转换为所需顺序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?