根据纸牌游戏的规则,使用只使用一个循环的通用方法对数组进行排序



输入

cards = ['Jack', 8, 2, 6, 'King', 5, 3, 'Queen', "Jack", "Queen", "King"] 

所需输出

[2,3,5,6,8,'Jack','Queen','King']

我可以用这种方法对它进行排序,但我想这不是一个只有一个循环的解决方案。其他人有什么猜测吗?

a= ['Jack', 8, 2, 6, 'King', 5, 3, 'Queen','King','Jack','Queen']
for i in range(len(a)):
if a[i]=='Jack':
a[i]=11
elif a[i]=='Queen':
a[i]=12
elif a[i]=='King':
a[i]=13
a.sort()

为非数字卡创建一个具有值的dict,并使用其get方法为sort/sorted创建一个key函数。

>>> ranks = {'Jack': 11, 'Queen': 12, 'King': 13}
>>> cards = ['Jack', 8, 2, 6, 'King', 5, 3, 'Queen', "Jack", "Queen", "King"]
>>> sorted(cards, key=lambda c: ranks.get(c, c))
[2, 3, 5, 6, 8, 'Jack', 'Jack', 'Queen', 'Queen', 'King', 'King']

代码:

cards = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
sorted(set(MyList), key = lambda x: cards.index(str(x)[0]))

输出:

[2, 3, 5, 6, 8, 'Jack', 'Queen', 'King']

最新更新