2012-04-28 81 views
1

如果我有一個列表,如下列:非常基本的格式問題

[(10, 20), (50, 60), (100, 110)] 

我如何才能讓這個看起來像這樣:

'10-20,50-60,100-110' 

如果對我的列表數量是可變?

我很抱歉這樣一個簡單的問題。但是我所嘗試過的每一件事,比如用' - '取代'',都失敗了。有任何想法嗎?

回答

5
>>> x = [(10, 20), (50, 60), (100, 110)] 
>>> ','.join('-'.join(map(str, t)) for t in x) 
'10-20,50-60,100-110' 
+0

上附加它。我可以這樣做'string'+'|'+(','。join(' - '。join map(str,t))for t in x))並得到字符串| 10-20,50-60,100-110 ?? – 2012-04-28 01:50:42

+1

@PatrickCampbell,是的,你也可以做'string'%s'%','。join(' - '。join(map(str,t))for t in x)'以避免字符串連接。 – huon 2012-04-28 01:52:38

+0

你能幫我解答一下類似的問題嗎?! http://stackoverflow.com/questions/10359993/going-to-a-certain-position-in-a-string – 2012-04-28 02:34:52

1

這是你要找的嗎?

data = [(10, 20), (50, 60), (100, 110)] 
for x in data: 
    print x[0], "-", x[1] 
+0

是的,東西很接近。不過,我想將其添加到我已有的字符串中。那麼,如果我有字符串+ ????,我該怎麼辦? – 2012-04-28 01:47:05

+1

我不確定你的程序是如何構建的,而不是打印,你可以將結果追加到你現有的字符串中?或者如果你稍後在你的程序中合併,你可以用打印的數據創建一個列表,然後在 – Lostsoul 2012-04-28 01:48:27

2

另一個(有點更具可讀性)的方式來做到這一點格式化爲使用

A)%樣式的字符串格式:

data = [(10, 20), (50, 60), (100, 110)] 

fmt = "%d-%d, %d-%d, %d-%d" % (data[0][0], data[0][1], data[1][0], data[1][1],...) 

,或者用一個列表理解:

fmt = ",".join("%d-%d" % i for i in data) 

B)python string.format方法:

fmt = ",".join("{0}-{1}".format(*i) for i in data) 
+0

謝謝喬爾,你可以看看這裏看到我之前說的:http:// stackoverflow。 com/questions/10359993 /將某個字符串放在某個位置 – 2012-04-28 02:07:54

+0

^^我無法得到這個工作,我認爲你可以做一個簡單的修復 – 2012-04-28 02:31:53

+0

@PatrickCampbell:它對我來說工作得很好。具體來說,你不能去工作嗎? – 2012-04-28 02:35:19

0

而修真內遍歷它可以解開列表的值:

>>> x = [(10, 20), (50, 60), (100, 110)] 
>>> ','.join('%d-%d' % (y,z) for (y,z) in x) 
'10-20,50-60,100-110'