将int转换为python列表

时间:2014-03-02 12:12:35

标签: python list python-2.7 python-3.x

如何将int转换为其数字列表,例如。

  

a = 1234

我必须将其用作

  

[1,2,3,4]

我尝试过使用

  

列表(a)中

但它显示错误。我可以使用其他任何东西

1 个答案:

答案 0 :(得分:6)

您可以先将a转换为字符串:

In [106]: map(int, str(a)) #in python3, you need list(map(int, str(a)))
Out[106]: [1, 2, 3, 4]

或使用列表理解而不是map

In [108]: [int(digit) for digit in str(a)]
Out[108]: [1, 2, 3, 4]

或手动方法:

In [10]: def bar(num):
    ...:     res=[]
    ...:     while num>0:
    ...:         res.append(num%10)
    ...:         num//=10
    ...:     return res[::-1]

In [11]: bar(1234567890)
Out[11]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

所有这三种方式在时间上都是平等的:

In [24]: def foo(num):
    ...:     return list(map(int, str(num)))

In [25]: def bar(num):
    ...:     res=[]
    ...:     while num>0:
    ...:         res.append(num%10)  #or try divmod(n, 10) if you like builtins
    ...:         num//=10
    ...:     return res[::-1]

In [26]: def lstcomp(num):
    ...:     return [int(digit) for digit in str(num)]

In [27]: num=1234567890123456789012345678901234567890

In [28]: timeit foo(num)
100000 loops, best of 3: 13.1 µs per loop

In [29]: timeit bar(num)
100000 loops, best of 3: 15.7 µs per loop

In [30]: timeit lstcomp(num)
100000 loops, best of 3: 14.6 µs per loop

编辑:

您还可以生成一个代表“链表”的元组,如@ J.F.Sebastian所述:

In [523]: f = lambda n, ll=None: f(n//10, (n%10, ll)) if n else ll

In [524]: f(123)
Out[524]: (1, (2, (3, None)))

可以在O(n)时间内转换为普通列表:

In [537]: llst=f(123)
     ...: res=[]
     ...: while llst:
     ...:     res.append(llst[0])
     ...:     llst=llst[1]
     ...: print res
[1, 2, 3]