首页 > 解决方案 > 使用混合的 int 和字符串对列表进行排序

问题描述

我正在尝试编写一些 tombala 游戏。这是我的代码。

self.player1_cards = [
        [random.randint(1, 91), '', random.randint(1, 91), '', random.randint(1, 91), '',
            random.randint(1, 91), '', random.randint(1, 91), random.randint(1, 91), ''],
        [random.randint(1, 91), random.randint(1, 91), '', random.randint(1, 91), '',
            random.randint(1, 91), '', random.randint(1, 91), random.randint(1, 91)],
        [random.randint(1, 91), '', random.randint(1, 91), '', random.randint(1, 91),
            '', random.randint(1, 91), '', random.randint(1, 91)]
    ]
    self.player2_cards = [
        [random.randint(1, 91), '', random.randint(1, 91), '', random.randint(1, 91), '',
            random.randint(1, 91), '', random.randint(1, 91), random.randint(1, 91), ''],
        [random.randint(1, 91), random.randint(1, 91), '', random.randint(1, 91), '',
            random.randint(1, 91), '', random.randint(1, 91), random.randint(1, 91)],
        [random.randint(1, 91), '', random.randint(1, 91), '', random.randint(1, 91),
            '', random.randint(1, 91), '', random.randint(1, 91)]
    ]

我正在创建这样的用户卡。之后,我尝试对所有整数进行升序排序。但是,当我尝试这样做时:

for i in range(0, 3):
        self.player1_cards[i].sort()
        self.player2_cards[i].sort()

    print("Player1:\n", self.player1_cards,
          "\nPlayer 2:\n", self.player2_cards)

我收到这样的错误:

self.player1_cards[i].sort()
TypeError: '<' not supported between instances of 'str' and 'int'

我理解为什么会发生这种情况,但我不知道如何对这个列表进行排序。你能帮我么?

标签: pythonlistsorting

解决方案


使用您的代码为第一行创建示例行:

>>> import random
>>> row = [random.randint(1, 91), '', random.randint(1, 91), '', random.randint(1, 91), '',
            random.randint(1, 91), '', random.randint(1, 91), random.randint(1, 91), '']
>>> row
[79, '', 78, '', 57, '', 54, '', 84, 26, '']

提取和排序数字,然后在数字位置使用它们:

>>> ordered = iter(sorted(x for x in row if x != ''))
>>> [next(ordered) if x != '' else '' for x in row]
[26, '', 54, '', 57, '', 78, '', 79, 84, '']

但是,与其将其构建为未排序的、将其拆开并重新构建为排序的,不如先将其构建为排序的更简单。


推荐阅读