2011-09-03 75 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