在Python中使用 .join 方法会删除列表的首尾项目
我正在尝试正确显示我这个类的字符串形式。为此,我需要把几个列表合并成一个字符串。合并后的字符串中,列表之间应该用空格隔开。
这是我的列表:
[['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...
这样就能解决问题了。