【问题标题】:Convert an int list into an int number将 int 列表转换为 int 数字
【发布时间】:2013-08-25 22:15:48
【问题描述】:

用Python编程,我想知道如何转换:

lst = [1,2,3,4]

到:

lst = 1234

我需要用列表的值创建一个 int

【问题讨论】:

  • 你为什么要这样做?为什么你有一个数字列表?
  • @user2357112 为什么他想要这样做或者他如何最终得到这个列表很重要?
  • @SethMMorton:因为通常,当有人想做一些奇怪的事情时,这是因为他们使用了错误的方法来做其他事情,最好的解决方案是更改代码的其他部分。
  • @user2357112 我不太确定这是不是很奇怪。此外,这是一个问答网站,即使这个问题纯粹是出于教育原因,它也是一个合法的问题,答案很简单。他们为什么想知道如何去做并不重要。
  • @SethMMorton:如果我们想为实际问题提供最佳解决方案,这很重要。相关:meta.stackexchange.com/questions/66377/what-is-the-xy-problem

标签: python algorithm list int converter


【解决方案1】:

一种明显的方法是将每个数字转换为字符串,连接字符串,然后再转换回整数:

>>> numbers = [1, 2, 3, 4]
>>> digits = [str(number) for number in numbers]
>>> digits
['1', '2', '3', '4']
>>> numeral = ''.join(digits)
>>> numeral
'1234'
>>> number = int(numeral)
>>> number
1234

当然,您可以很容易地将这一切合并为一个表达式:

>>> number = int(''.join(str(number) for number in numbers))

另一个明显的方法是数学:

>>> number = 0
>>> for digit in numbers:
...     number = number * 10 + digit
>>> number
1234

这有点难以用一个表达式来表达,所以我将把它作为练习留给读者。 (最简单的方法见reduce。)

【讨论】:

    【解决方案2】:

    最简单的方法是将其设为str,然后设为int

    >>> lst = [1, 2, 3, 4]
    >>> int(''.join(map(str, lst)))
    1234
    

    如果列表的每个元素都是单个数字,您还可以执行以下操作,

    >>> def lst_to_int(l):
    ...     return sum(d*10**i for i, d in enumerate(reversed(l)))
    ... 
    >>> lst_to_int(lst)
    1234
    

    【讨论】:

      【解决方案3】:

      不确定您是如何陷入这种困境的,但您可以使用reduce 将数字继续移动 10 位

      a_list = [1,2,3,4]
      reduce(lambda x,y: x*10+y, a_list)
      

      【讨论】:

      • 大概int(str)内部是如何实现的。
      • @PaulMcGuire: 不。你可能想看看the CPython code,但基本上,它从右边加和进,而不是从左边乘加(并在最重要的是)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多