在python中使用.join方法删除列表中的第一个和最后一个项目

时间:2014-11-01 06:16:59

标签: python python-2.7

我试图让我的班级的字符串表示正确。 为此,我需要将几个列表连接成一个字符串。 列表应该是在字符串中分隔的空格。

这些是我的清单:

[['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 个答案:

答案 0 :(得分:3)

.join采用可迭代的方式,并在项目之间添加您想要的字符串。所以这可以按预期工作。

你想要的是,当连接生成的字符串时,会添加一个空格 -

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

当然,最后,如果有必要,你将不得不摆脱尾随的空白。

==编辑==

你也可以这样做:

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

答案 1 :(得分: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...

这将解决问题。