【问题标题】:Divide number into digits and save them in list (array) using python将数字分成数字并使用python将它们保存在列表(数组)中
【发布时间】:2011-08-18 10:55:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: python arrays list numbers digits


    【解决方案1】:

    由于您只是按从小到大的顺序添加数字,因此只需使用一个空列表:

    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)),它将它变成一个字符串然后得到长度。

    【讨论】:

    • 这可能差别很小,但无论如何,如果 numbesr 很大并且你有很多,哪种方法更优化,使用循环、mod、div 或只是 list(int(d) for d in str(num)?
    • 除法版比字符串版快400倍。
    【解决方案2】:

    假设num为正整数,则位数等于int(math.log10(num) + 1)

    但比这更好的是只使用listappend 方法——这样您就不必事先知道长度。

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

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

    dig = map(int, str(num))
    

    【讨论】:

    • 好点,我看错了。呸,你删除了它,没有评论支持你。
    【解决方案3】:

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

    >>> d = 123456
    >>> map(int, str(d))
    [1, 2, 3, 4, 5, 6]
    

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 2013-03-06
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      相关资源
      最近更新 更多