2012-09-18 85 views
4

我有以下列表:元組轉換爲字符串

[('Steve Buscemi', 'Mr. Pink'), ('Chris Penn', 'Nice Guy Eddie'), ...] 

我需要將其轉換爲字符串的格式如下:

"(Steve Buscemi, Mr. Pink), (Chris Penn, Nice Guy Eddit), ..." 

我試圖做

str = ', '.join(item for item in items) 

但遇到以下錯誤:

TypeError: sequence item 0: expected string, tuple found 

我該怎麼做上面的格式?

回答

12
', '.join('(' + ', '.join(i) + ')' for i in L) 

輸出:

'(Steve Buscemi, Mr. Pink), (Chris Penn, Nice Guy Eddie)' 
0

你是關閉...

print ",".join(str(i) for i in items) 

print str(items)[1:-1] 

print ",".join(map(str,items)) 
+1

另外請注意,這將有一堆中有多餘的引號。 – mgilson

1

您可以簡單地使用:

print str(items)[1:-1].replace("'", '') #Removes all apostrophes in the string 

您想要省略列表中方括號中的第一個和最後一個字符。正如許多評論中提到的,這會在字符串周圍留下單引號。你可以用replace刪除它們。

NB正如@ovgolovin這將刪除所有撇號,甚至沒有在這個名字指出。

+0

這個解決方案在括號內留下了tickmarks:''('Steve Buscemi','Mr. Pink'),('Chris Penn','Nice Guy Eddie')「' – ovgolovin

+0

」我需要將它轉換爲字符串「 - this答案雖然簡單,但不符合要求。 –

+0

這個答案很好,但不會去掉字符串中的單引號,這是我需要做的。 – David542

3
s = ', '.join('(%s)'%(', '.join(item)) for item in items) 
+0

這給出了(',g,e,n,e,r,a,t,o,r,o,b,j,e,c,t,,<,g,e,n,e ,x,p,r,>,a,t,...,0,x,b,7,2,0,5,c,3,4,...)。 :^) – DSM

+0

@DSM - 只有當你把錯過的圓括號放在錯誤的位置(最後)時。我已更新並修復它。 – mgilson

+0

是的。這不是我第一次這麼做,實際上 - 出於某種原因,我總是認爲最後會遺漏一些東西,這導致了不止一次的錯誤。 : -/ – DSM

5

你很近。

str = '(' + '), ('.join(', '.join(names) for names in items) + ')' 

輸出:

'(Steve Buscemi, Mr. Pink), (Chris Penn, Nice Guy Eddie)' 

其分解:外括號分別加入,而內那些被第一'), ('.join生成。圓括號內的名稱列表是使用單獨的', '.join創建的。

+0

我喜歡這個解決方案!它避免了在我的解決方案中使用'+'運算符爲每個元組冗餘字符串連接(這會導致在每次操作後重新創建字符串)。在你的解決方案中,這個連接只發生在所有連接之後的最後一步。 – ovgolovin

+0

@ovgolovin,我認爲你更容易遵循,這就是爲什麼我添加了故障。你應該得到複選標記。 –

+0

我更喜歡你的答案,因爲你解釋了爲什麼!謝謝 – Drewdin