【问题标题】:how to split number (not character) into two parts in python如何在python中将数字(不是字符)分成两部分
【发布时间】:2017-10-12 14:51:43
【问题描述】:

如何在没有任何算术运算的情况下在 python 中将一个数字一分为二?例如下表:

20670005000000
30003387889032
44555008000004

我希望字符串在拆分后看起来像下面的列(并保留可用于数值分析的数字):

2067000  5000000
3000338  7889032
4455500  8000004

在 Python 中最简洁的方法是什么?有没有直接处理这个的python模块?

【问题讨论】:

  • 它们在我看来就像子字符串...maybe this will help。到字符串 > 子字符串 > 解析 int
  • 甚至this one
  • str(a)[:len(str(a))/2], str(a)[len(str(a))/2:]a=20670005000000
  • 如果将数字转换为字符串并且其长度由len 确定,是否认为arithmetic
  • 有别的想法

标签: python split integer number-formatting


【解决方案1】:

这是一种可能的方式:

N = 10000000
i = 20670005000000

# The first part of the number i
i // N
# the second part
i % N

【讨论】:

  • OP 说:"without any arithmetic"
【解决方案2】:

我不知道这是否是最好的方法,但是您可以转换为字符串,而不是将其拆分,然后将其再次转换为整数:

number = (int(str(number)[:len(number)/2]), int(str(number)[len(number)/2:]))

这会给你一个你以后可以使用的touple。 您可以通过使用列表推导进一步优化这一点。

【讨论】:

    【解决方案3】:

    似乎这个问题中现有的操作模式是将每个字符串值分成两半。

    import re
    s = [20670005000000, 30003387889032, 44555008000004]
    final_string = [map(int, re.findall('.{'+str(len(str(i))//2)+'}', str(i))) for i in s]
    

    输出:

    [[2067000, 5000000], [3000338, 7889032], [4455500, 8000004]]
    

    【讨论】:

      【解决方案4】:

      您可以将 int 映射到 str,然后将其拆分。记得把它转换回 int

        data = [20670005000000,
              30003387889032,
              44555008000004,]
      
        str_data = map(str, data)
        res = map(lambda x: [x[:len(x)//2],x[len(x)//2:]], str_data )
        res = map(int, reduce(lambda x,y: x+y, res) )
        print res
      

      输出:

      [2067000, 5000000, 3000338, 7889032, 4455500, 8000004]
      

      【讨论】:

      • 整数是否除以二 (len(x)//2) 算术
      • @wwii 它正在尝试找到中间点。如果 op 想要固定长度,它可以硬编码
      【解决方案5】:

      假设每次都应该在center处精确除数,我们可以使用其中的stringslicing得到两个数。

      在这里使用单个数字:

      >>> s = str(20670005000000)
      >>> l = int(len(s)/2)
      >>> a,b = s[:l],s[l:]
      >>> int(a)
      =>  2067000   
      >>> int(b)
      =>  5000000
      

      这里是数字列表:

      for ele in map(str,arr): 
         l = int( len(ele)/2 ) 
         a,b = ele[:l], ele[l:]
      
         print(int(a), int(b)) 
      

      # 驱动程序值

      IN : arr = [20670005000000, 30003387889032, 44555008000004]
      
      OUT : 2067000 5000000
            3000338 7889032
            4455500 8000004
      

      【讨论】:

        【解决方案6】:

        假设 str.len() 不涉及算术并且比较两个整数 (2 > 3) 不是算术:

        import collections
        n = 20670005000000
        
        left = collections.deque(str(n))
        right = collections.deque()
        while len(left) > len(right):
            right.appendleft(left.pop())
        
        left = int(''.join(left))
        right = int(''.join(right))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-30
          • 1970-01-01
          • 1970-01-01
          • 2017-07-17
          • 1970-01-01
          • 1970-01-01
          • 2022-08-10
          相关资源
          最近更新 更多