【问题标题】:Write the digits of a number into an array将数字的数字写入数组
【发布时间】:2014-01-21 01:43:31
【问题描述】:

我想用一个很长的数字的单独数字来计算。我如何在 Python2.7 中做到这一点?我想过以某种方式将数字写入数组,以便我可以使用 array(x) 访问数字:

number = 123456789123456789
array = [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]

问题是,这个数字有很多位数,手动完成需要很长时间。那么我怎样才能自动做到这一点呢?

【问题讨论】:

    标签: python list python-2.7


    【解决方案1】:

    你可以像这样使用mapintstr函数

    print map(int, str(number))
    

    str 函数将number 转换为字符串。

    map 函数将int 函数应用于字符串化数字的每个元素,将字符串转换为整数。

    输出

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    如果您一次又一次地这样做,就像在循环中一样,那么列表理解将比 map 方法更快

    number = 123456789123456789
    from timeit import timeit
    print timeit("map(int, str(number))", "from __main__ import number")
    print timeit("[int(dig) for dig in str(number)]", "from __main__ import number")
    

    在我的机器上输出

    12.8388962786
    10.7739010307
    

    【讨论】:

    • +1 我真的很喜欢这里我不知道的智能地图的使用。
    【解决方案2】:

    作为替代方案,纯数学解决方案如下。通过反复除以 10 并取余数,您可以提取每个数字。

    n = 123456789123456789
    result = []
    while n != 0:
        n, d = divmod(n, 10)
        result.append(int(d))
    result.reverse()
    print result # [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    【讨论】:

    • 干得好。两个小的改进: divmod 在应用于 int 时返回 int,因此不需要 int(d)insert(0,d) 而不是 append 以摆脱反向步骤。
    • 提问者给出了123456789123456789作为样本数据,所以(至少在2.7)divmod返回一个long。 insert(0,d) 将在二次时间中运行 - 我宁愿拥有 reverse 并获得线性时间。不过感谢您的建议。
    • +1 您也可以在此处使用collections.deque 以更快地插入左侧。
    【解决方案3】:

    您也可以使用列表理解链接。

    array = [int(x) for x in str(number)]
    

    【讨论】:

      【解决方案4】:

      您可以简单地遍历数字中的每个数字并推入一个数组。试试这个

      result = []
      for d in str(number):
          result.append (int(d))
      
      print result
      

      【讨论】:

      • thefourtheye 的答案似乎更好,但这也有效
      • @NaveedHasan 是的,我真的很喜欢 thefourtheye 的回答。我花了大约 2 分钟来编写这段代码并对其进行测试。与此同时,thefourtheye 发布了一个很棒的答案:|
      猜你喜欢
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 2012-07-17
      • 2015-07-05
      • 1970-01-01
      相关资源
      最近更新 更多