2011-02-02 23 views
0

我有一個像元組的列表:連接元件

data = [('a1', 'a2'), ('b1', 'b2')] 

我想產生這樣的字符串:"('a1', 'a2'), ('b1'. 'b2')"

如果我這樣做:','.join(data),我得到一個錯誤:

TypeError: sequence item 0: expected string, tuple found 

如果我想在做一行沒有做類似:

for elem in data: 
    str += ',%s' % str(elem) 

那麼有沒有辦法?

+1

爲什麼你想要這樣的輸出? – SilentGhost 2011-02-02 12:37:19

回答

14

使用生成器將元組投射到字符串,然後使用join()

>>> ', '.join(str(d) for d in data) 
"('a1', 'a2'), ('b1', 'b2')" 
0
','.join(str(i) for i in data) 
1

丟棄str()輸出的開閉括號:

>>> data = [('a1', 'a2'), ('b1', 'b2')] 
>>> str(data) 
"[('a1', 'a2'), ('b1', 'b2')]" 
>>> str(data)[1:-1] 
"('a1', 'a2'), ('b1', 'b2')" 
>>> 
0

佩恩和marcog的答案是正確的,因爲它們直接元組轉換爲字符串。

如果您需要的輸出格式更多的靈活性,你可以解開發電機表達式中的元組,並使用其值作爲參數格式字符串以這樣的方式

", ".join("first element: %s, second element: %s" % (str(x), str(y)) for x, y in data) 

這樣就可以克服元組的默認str表示。

+0

你不需要顯式轉換爲元組的str元素:1.它們已經是字符串,2.當格式化字符串時,它們將被隱式轉換。 – SilentGhost 2011-02-02 12:46:41