如何在Python中对该数组排序?

时间:2018-08-08 11:32:45

标签: python arrays list sorting

我有这个数组:

[14, 'S', 12, 'D', 8, 'S', 9, 'S', 10, 'D']

我想按降序对它们进行排序(数字),但同时将数字与以下字母保持在一起。因此结果应如下所示:

[14, 'S', 12, 'D', 10, 'D', 9, 'S', 8, 'S']

我该怎么做?

我试图这样做(five_cards_num是数组的名称):

for j in range(4):
    max = five_cards_num[j]
    max_color = five_cards_num[j+1]
    for i in range(j, 5):
        if (five_cards_num[2*i] > max):
            max = five_cards_num[2*i]
            max_color = five_cards_num[2*i+1]
            five_cards_num[2*i] = five_cards_num[j]
            five_cards_num[2*i+1] = five_cards_num[j+1]
            five_cards_num[j] = max
            five_cards_num[j+1] = max_color

但是我得到了错误:

TypeError:“>”和“ str”的实例之间不支持“>”

谢谢。

3 个答案:

答案 0 :(得分:2)

我更喜欢这种简单的解决方案:

list(sum(sorted(zip(x[::2], x[1::2]), reverse=True), ()))

输出

[14, 'S', 12, 'D', 10, 'D', 9, 'S', 8, 'S']

答案 1 :(得分:1)

您可以使用zip将列表变成元组列表,以便可以将这些对排序在一起,然后使用嵌套列表理解将其展平:

print([a for i in sorted(zip(five_cards_num[::2], five_cards_num[1::2]), reverse=True) for a in i])

这将输出:

[14, 'S', 12, 'D', 10, 'D', 9, 'S', 8, 'S']

答案 2 :(得分:0)

再次使用itertools

>>> import itertools as it
>>> a = [14, 'S', 12, 'D', 8, 'S', 9, 'S', 10, 'D']
>>> b = sorted(it.izip(*[iter(a)]*2), reverse=True)
>>> b
[(14, 'S'), (12, 'D'), (10, 'D'), (9, 'S'), (8, 'S')] # you may want to play with a list of tuples (?|!)
>>> list(it.chain(*b))
[14, 'S', 12, 'D', 10, 'D', 9, 'S', 8, 'S']