2012-02-04 103 views
2

我想將一個int數組(如這個[1, 1, 2, 1])轉換成一個字符串("1121")。將int數組轉換爲字符串的最佳方式是什麼?

什麼是最好的(最pythonic)的方式來做到這一點?

我總是做這樣的事情,然後刪除多餘的括號:

>>> str([1, 2, 1, 1]) 
'[1, 2, 1, 1]' 

或者我可以做這樣的事情:

s = "" 
for i in [1, 2, 1, 1]: 
    s += s(i) 

但是這兩種方法感到有點不穩。有沒有更好的方法來做到這一點?

爲了記錄,我自然對所有版本的Python感興趣,但我正在研究py2.7,並且更喜歡使用此版本的答案。

回答

5

生成表達式:

"".join(str(i) for i in l) 

PS:你的 「陣列」 是一個真正的名單。

+0

絕對是一個列表。我經過6個月強烈的C後纔剛回到Python。這肯定會發生:s – rahmu 2012-02-04 19:03:03

5

嘗試:

l = [1, 2, 1, 1] 
s = ''.join(map(str, l)) 
print(s) 

這裏,map(str, l)轉換成l字符串列表,並''.join(...)合併的字符串。

+0

另外'「」。加入(STR(X)爲長x )'可以讀取更整齊(並避免Python 2.x中的中間列表,儘管*可以通過itertools.imap來避免)。 – delnan 2012-02-04 18:59:26

+7

@delnan由於* str.join *對數據進行了兩次傳遞,因此如果您給它一個開頭的列表,它將運行得更快。這是少數情況下總是需要中間列表的情況之一(如果不提供中間列表,* str.join *必須自己創建一個)。 – 2012-02-04 19:20:52

+2

@RaymondHettinger:+1有趣的是,沒有考慮到這一點(但它現在有意義 - 一次計算結果字符串的大小和一次構建它的過程)。我可能仍然使用習慣中的生成器表達並保持一致性。 – delnan 2012-02-04 19:23:12

4

試試這個:

lst = [1, 2, 1, 1] 
''.join(str(x) for x in lst) 

它是有效的,因爲它不產生中間列表(map那樣),而是遍歷此列表使用迭代器。

0

這一個是隻是爲了好玩,因爲它只有在列表中的每個元素是個位數的整數作品:

lst = [1, 1, 0, 1] 

def convert_to_str(): 
    new_num = 0 
    for i in xrange(len(lst)): 
     new_num += lst[i]*(10**(len(lst)-1-i)) 
    return str(new_num) 
+0

or str(reduce(lambda a,b:a * 10 + b,lst)) – greggo 2012-04-25 22:12:09

相關問題