【问题标题】:Converting an int into a python List [duplicate]将int转换为python列表[重复]
【发布时间】:2014-04-03 08:33:00
【问题描述】:

我如何将 int 转换为它的数字列表,例如。

a = 1234

我必须把它当作

[1,2,3,4]

我尝试过使用

列表(a)

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

【问题讨论】:

  • 您要解决的问题是什么?
  • 我只是想循环一个整数,如 i in range(1,1000): 然后使用这些单独的数字来计算一些东西

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


【解决方案1】:

您可以先将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]

【讨论】:

  • 我已经用过我只是想知道有什么可以直接使用的东西,因为它在 python 中是不可迭代的,但字符串是其他任何可以直接改变这种格式的
  • @saurabh 我不认为有一个内置方法可以做到这一点,因为正如你提到的那样 int 不是可迭代的。如果你想重用它,你可以把它变成一个函数。
  • 更传统的功能方法避免了可变状态,例如f = lambda n, ll=None: f(n//10, (n%10, ll)) if n else ll btw,map(int, str(a))bar()更实用
  • @J.F.Sebastian f(12) 用您的演示返回 (1, (2, None))
  • @zhangxaochen:这是一个预期的结果(使用元组表示的链表)。它可以转换为O(n)中的普通Python列表。
猜你喜欢
  • 2014-06-16
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2019-10-23
  • 2021-12-25
  • 1970-01-01
  • 2017-09-10
相关资源
最近更新 更多