【问题标题】:convert an int to list of individual digitals more faster?更快地将 int 转换为单个数字列表?
【发布时间】:2011-07-11 16:44:38
【问题描述】:

全部,

我想定义一个 int(987654321) [9, 8, 7, 6, 5, 4, 3, 2, 1] 转换器,如果 int 数的长度 ,例如 10 列表将是 [0,0,0,0,0,0,0,1,0] ,如果长度 > 9,例如 9987654321 ,则列表将为 [9, 9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> i
987654321
>>> l
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> z = [0]*(len(unit) - len(str(l)))
>>> z.extend(l)
>>> l = z
>>> unit
[100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10, 1]

>>> sum([x*y for x,y in zip(l, unit)])
987654321
>>> int("".join([str(x) for x in l]))
987654321


>>> l1 = [int(x) for x in str(i)]
>>> z = [0]*(len(unit) - len(str(l1)))
>>> z.extend(l1)
>>> l1 = z
>>> l1
[9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> a = [i//x for x in unit]
>>> b = [a[x] - a[x-1]*10 for x in range(9)]
>>> if len(b) = len(a): b[0] = a[0]  # fix the a[-1] issue
>>> b 
[9, 8, 7, 6, 5, 4, 3, 2, 1]

我测试了上述解决方案,但发现这些解决方案可能没有我想要的更快/足够简单,并且内部可能存在与长度相关的错误,任何人都可以与我分享这种转换的更好解决方案吗?

谢谢!

【问题讨论】:

  • 你测试过速度吗?你的时间安排是什么?
  • 我稍后会粘贴测试结果,但我认为字符串约定应该比int数字操作慢。

标签: python string list int converter


【解决方案1】:

将任意长度的整数按整数位顺序放入列表中 -

a = 123456789123456789123456789123456789123456789123456789
j = len('{}'.format(a))
b = [0 for i in range(j)]
c = 0
while j > 0:
    b [c] = a % 10**j // 10**(j-1)
    j = j-1
    c = c + 1
print(b)

输出 -

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

您可以将条件放在 j 上,以便对 b 进行替代分配。

【讨论】:

    【解决方案2】:

    也许我遗漏了一些东西,但这还不够吗(没有值检查)?

    def int_to_list(i):
        return [int(x) for x in str(i).zfill(9)]
    
    def list_to_int(l):
        return int("".join(str(x) for x in l))
    

    参考:str.zfill

    【讨论】:

      【解决方案3】:

      然后呢:

      def int_to_list(num)
          return list ("%010d" % num)
      

      【讨论】:

        【解决方案4】:
        def convert(number):
            stringified_number = '%s' % number
            if len(stringified_number) < 9:
                stringified_number = stringified_number.zfill(9)
            return [int(c) for c in stringified_number]
        
        >>> convert(10)
        [0, 0, 0, 0, 0, 0, 0, 1, 0]
        
        >>> convert(987654321)
        [9, 8, 7, 6, 5, 4, 3, 2, 1]
        

        【讨论】:

          猜你喜欢
          • 2013-08-25
          • 1970-01-01
          • 1970-01-01
          • 2014-07-18
          • 2011-05-18
          • 2015-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多