用Python将数字拆分为数字并保存到列表中
我想把一个数字拆分成每一位,然后把这些位数存到一个列表(或者数组)里,使用Python来实现。首先,我需要创建一个像这样的列表:
dig = [0 for i in range(10)]
然后我可以这样做:
i = 0
while num > 9:
dig[i] = num % 10
i += 1
num /= 10
dig[i] = num
不过,我其实不太喜欢单纯地创建一个有10个空间的列表。有没有办法在不重复循环的情况下,先知道这个数字的长度呢?
i = 0
num2 = num
while num2 > 9:
num2 /= 10
i += 1
i += 1
然后再重复代码的第一部分?或者就像我最开始那样做?我并不知道这个数字的确切长度,但它不会很长。
所以,有什么建议吗?也许你知道更好的方法来把数字拆分成每一位,或者其他什么方法。
3 个回答
2
虽然大家常说 map
这个东西在 Python 里不太符合风格,但这个任务确实很适合用它来完成:
>>> d = 123456
>>> map(int, str(d))
[1, 2, 3, 4, 5, 6]
5
假设 num
是一个正整数,那么这个数字的位数可以通过 int(math.log10(num) + 1)
来计算。
不过,更简单的方法是直接使用 list
的 append
方法,这样你就不需要事先知道长度了。
还有一种更简单的方法(不过这样得到的列表会是反向的):
dig = [int(x) for x in str(num)]
或者
dig = map(int, str(num))
10
因为你只是按从小到大的顺序加数字,所以可以用一个空列表来开始:
dig = []
i = 0
while num > 9:
dig.append(num % 10)
i += 1
num /= 10
dig.append(num)
另外,你也可以这样做:
dig = list(int(d) for d in str(num))
这样可以把比如说 123
变成 '123'
,然后再把每个数字变回数字,放到一个列表里,最后得到 [1, 2, 3]
。
如果你想保持和你自己版本一样的顺序,可以用:
dig = reversed(int(d) for d in str(num))
如果你只是想知道一个数字的长度,最简单的方法就是用 len(str(num))
,这会把数字变成字符串,然后计算长度。