转换整数列表到一个单一的价值
如果他们喜欢这个数字,
sum(digit * 10 ** place for place, digit in enumerate(reversed(x)))
>>> listvar = [1,2,3,4,5]
>>> reduce(lambda x,y:x*10+y, listvar, 0)
12345
出人意料的是,这是更快的大名单:
$ 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
但对于非常小的列表(?也许更常见),这一个是最慢的。
我不明白你为什么决定在大于9的列表项目中做什么是正确和错误的事情。 OP似乎没有提及任何东西。 –
(我也没有看到为什么计时这是合适的和建设性的,我们当然不会确定主要基于microbenchmarks使用什么代码。) –
@Mike你说得对,我已经改变了我的代码。正如上面提到的那样,这个时机只适用于大型列表的情况。 – eph
这个问题是怎么产生的? –