在Python中使用 .join 方法会删除列表的首尾项目

0 投票
2 回答
569 浏览
提问于 2025-04-30 23:56

我正在尝试正确显示我这个类的字符串形式。为此,我需要把几个列表合并成一个字符串。合并后的字符串中,列表之间应该用空格隔开。

这是我的列表:

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

这是我用来合并它们的代码:

    def __str__(self):
    str_deck_cards = 'Deck contains '
    for t in self.deck_cards:
        str_deck_cards += ' '.join(t)
    return str_deck_cards

但是我的输出看起来是这样的:

Deck contains C AC 2C 3C 4C 5C 6C 7C 8C 9C TC JC QC KS AS 2S 3S 4S 5S 6S 7S 8S 9S TS JS QS KH AH 2H 3H 4H 5H 6H 7H 8H 9H TH JH QH KD AD 2D 3D 4D 5D 6D 7D 8D 9D TD JD QD K

为什么它没有正确合并这些列表呢?

我也试过用set()

    def __str__(self):
    str_deck_cards = 'Deck contains '
    for t in self.deck_cards:
        str_deck_cards += ' '.join(set(t))
    return str_deck_cards

但它还是不对。现在我没有其他想法了,有什么建议吗?

暂无标签

2 个回答

3

.join 是一个方法,它可以把一个可迭代的对象(比如列表)里的每个元素用你想要的字符串连接起来,放在它们之间。所以这个用法是没问题的。

你想要的是在把生成的字符串连接起来的时候,加一个空格,所以可以这样写:

str_deck_cards += ' '.join(t) + ' '

当然,如果最后多了一个空格,你可能需要把它去掉。

== 编辑 ==

你也可以这样做:

return 'Deck contains ' + ' '.join([' '.join(x) for x in self.deck_cards])

1

其实并没有什么被删除。你是在一个子列表 C AC 2 中的两个字符之间加了一个空格,而不是在两个子列表 CA C2 之间加空格。所以把:

str_deck_cards += ' '.join(set(t)) # gives C AC 2C 3C 4C 5...

换成:

str_deck_cards +=''.join(t)+' ' # gives CA C2 C3 C4 C5...

这样就能解决问题了。

撰写回答