【问题标题】:Python: List to ints to a single number?Python:将整数列表到单个数字?
【发布时间】:2011-03-11 07:37:00
【问题描述】:

假设我有一个整数列表:

x =  [['48', '5', '0'], ['77', '56', '0'],
['23', '76', '34', '0']]

我希望将此列表转换为单个数字,但单个数字类型仍然是整数,即:

4850775602376340

我一直在使用这个代码来执行这个过程:

num = int(''.join(map(str,x)))

但我不断收到值错误。

此外,如果我的列表包含负整数,我将如何将它们转换为绝对值?然后将它们转换为单个数字?

x2 = [['48', '-5', '0'], ['77', '56', '0'], ['23', '76', '-34', '0']]

x2 = 4850775602376340

提前致谢。

【问题讨论】:

    标签: python list


    【解决方案1】:
    >>> int(''.join(reduce(lambda a, b: a + b, x)))
    4850775602376340
    

    【讨论】:

    • 只是另一个简单的问题,如果单个数字不包含整数,我将如何提出和错误?
    • @harpalss:如果你想确定的话,你可以遍历项目并检查 type(i)==int
    • 在这种情况下,int() 调用将引发 ValueError。
    【解决方案2】:

    我会为此使用itertools.chain.from_iterable(python 2.6 中的新功能)

    示例代码:

    import itertools
    x = [['48', '5', '0'], ['77', '56', '0'], ['23', '76', '34', '0']]
    print int(''.join(itertools.chain.from_iterable(x)))
    

    【讨论】:

      【解决方案3】:
      >>> int(''.join(j for i in x for j in i))
      4850775602376340
      

      【讨论】:

        【解决方案4】:

        它是一个列表列表,所以

        num = int(''.join(''.join(l) for l in lists))
        

        def flatten( nested ):
            for inner in nested:
                for x in inner:
                    yield x
        
        num = ''.join(flatten(lists))
        

        【讨论】:

        • 你能再解释一下这个答案吗?我不明白这是什么意思。
        【解决方案5】:
        >>> x = [['48', '5', '0'], ['77', '56', '0'], ['23', '76', '34', '0']]
        >>> int(''.join([''.join(i) for i in x ] ))
        4850775602376340
        

        【讨论】:

        • 要将其转换为实际的 int,请将 int() 调用包裹在其周围。
        【解决方案6】:

        已经足够好的答案了......只是想添加无限嵌套的处理:

        def flatten(obj):
            if not isinstance(obj, list):
                return obj
            else:
                return ''.join([flatten(x) for x in obj])
        
        >>> x = [['48', '5', '0'], ['77', '56', '0'], ['23', '76', '34', '0']]
        >>> flatten(x)
        '4850775602376340'
        
        >>> x = [['48', '5', '0'], ['77', '56', '0'], [['23','123'], '76', '34', '0']]
        >>> flatten(x)
        '4850775602312376340'
        

        【讨论】:

          【解决方案7】:

          简单地说:

          1. 扁平化列表

            [e for e in (itertools.chain(*x))]
            
          2. 去掉负号

            e.replace('-','')
            
          3. 将列表中的数字连接成字符串并将其转换为数字

            int(''.join(x))
            

          把它们放在一起

          x2 = int(''.join([e.replace('-','') for e in (itertools.chain(*x))]))
          

          【讨论】:

            猜你喜欢
            • 2010-12-27
            • 1970-01-01
            • 2018-10-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-28
            • 2019-09-19
            相关资源
            最近更新 更多