2

我想将数字分成数字并将它们保存在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

然后重复第一部分代码?还是像我一开始做的那样做?我不知道数字的确切长度,但不会很长

那么有什么建议吗?也许您知道将数字划分为数字的更好方法,或者其他方法。

4

3 回答 3

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这将变成ie ,'123'然后将每个数字变成一个数字并将它们放入一个列表中,从而产生[1, 2, 3].

如果您希望它的顺序与您的版本相同,请使用

dig = reversed(int(d) for d in str(num))

如果您真的只想获取数字的长度,最简单的方法是len(str(num))将其转换为字符串然后获取长度。

于 2011-08-18T10:59:11.253 回答
5

假设num是一个正整数,位数等于int(math.log10(num) + 1)

但比这更好的是只使用append--list这样你就不必事先知道长度了。

更容易(尽管列表将按相反的顺序排列):

dig = [int(x) for x in str(num)]

或者

dig = map(int, str(num))
于 2011-08-18T10:58:45.497 回答
2

虽然map常被说成是unpythonic,但这个任务绝对是给它的:

>>> d = 123456
>>> map(int, str(d))
[1, 2, 3, 4, 5, 6]
于 2011-08-18T11:03:14.450 回答