当把它转换成一个字符串然后再转换成一个int时,这是一个有点老套的方法。我们已经掌握了制作数字所需的所有信息,即:数字。
数字的位置。
由于我们有这些信息,我们可以通过计算每个位置的每个单元的值,然后将其乘以所述位置的数字来计算数字。然后我们把结果加起来,得到我们的号码。这可以在一行中完成,如下所示:test = (1, 2, 3)
sum((10**pos)*val for pos, val in enumerate(reversed(test)))
让我们把这个分解一下:>>> list(enumerate(reversed(test)))
[(0, 3), (1, 2), (2, 1)]
那么,如果我们把它乘起来:>>> list((10**pos)*val for pos, val in enumerate(reversed(test)))
[3, 20, 100]
所以我们求和得到123。
编辑:关于速度的说明:python -m timeit "int(\.join(map(str,(1,2,3))))"
100000 loops, best of 3: 2.7 usec per loop
python -m timeit sum((10**pos)*val for pos, val in enumerate(reversed((1,2,3))))
100000 loops, best of 3: 2.29 usec per loop
python -m timeit -s from functools import reduce educe(lam