2011-09-03 77 views
3

如果我有整數說的名單,轉換整數列表到一個單一的價值

x = [1,2,3,4,5] 

是否有一個內置的,可以轉換成12345一個號碼這個功能呢?如果不是,最簡單的方法是什麼?

+3

這個問題是怎麼產生的? –

回答

2
int("".join(str(X) for X in x)) 

你還沒告訴我們x = [1, 23, 4]結果應該是通過什麼方式... 我的回答給了1234,其他放棄只是爲了好玩:)

int(str(x)[1:-1].replace(', ', '')) 
+2

or simpler:'int(''。join(map(str,x)))' – eph

+0

我以列表格式從函數接收值。所以我必須連接它們才能獲得完整的價值。例如,我得到一個實際上是3200的值[3,2,0,0],所以我需要加入元素以獲得單個值,然後對其進行處理。 – kbb

+2

它是**你的**功能嗎? –

4

如果他們喜歡這個數字,

sum(digit * 10 ** place for place, digit in enumerate(reversed(x))) 
5
>>> listvar = [1,2,3,4,5] 
>>> reduce(lambda x,y:x*10+y, listvar, 0) 
12345 
+2

+1,cool使用'reduce' –

+1

使用'reduce'並不酷。拒絕吧。 –

+0

爲什麼它不是很酷?因爲你沒有想到它? – wim

1

出人意料的是,這是更快的大名單:

$ python -m timeit -s "x=[1,2,3,4,5,6,7,8,9,0]*100" "int(str(x)[1:-1].replace(', ', ''))" 
10000 loops, best of 3: 128 usec per loop 

$ python -m timeit -s "x=[1,2,3,4,5,6,7,8,9,0]*100" "int(''.join(map(str, x)))" 
10000 loops, best of 3: 183 usec per loop 

$ python -m timeit -s "x=[1,2,3,4,5,6,7,8,9,0]*100" "reduce(lambda x,y:x*10+y, x, 0)" 
1000 loops, best of 3: 649 usec per loop 

$ python -m timeit -s "x=[1,2,3,4,5,6,7,8,9,0]*100" "sum(digit * 10 ** place for place, digit in enumerate(reversed(x)))" 
100 loops, best of 3: 7.19 msec per loop 

但對於非常小的列表(?也許更常見),這一個是最慢的。

+0

我不明白你爲什麼決定在大於9的列表項目中做什麼是正確和錯誤的事情。 OP似乎沒有提及任何東西。 –

+0

(我也沒有看到爲什麼計時這是合適的和建設性的,我們當然不會確定主要基於microbenchmarks使用什麼代碼。) –

+0

@Mike你說得對,我已經改變了我的代碼。正如上面提到的那樣,這個時機只適用於大型列表的情況。 – eph