Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将数字(而不是字符)分成两部分_Python_Split_Integer_Number Formatting - Fatal编程技术网

如何在python中将数字(而不是字符)分成两部分

如何在python中将数字(而不是字符)分成两部分,python,split,integer,number-formatting,Python,Split,Integer,Number Formatting,在python中,如果没有任何算术运算,如何将一个数字一分为二?例如,下表: 20670005000000 30003387889032 44555008000004 我希望字符串在拆分后看起来像下面的列(并保留可用于数值分析的数字): 在Python中,最整洁的方法是什么?是否有直接处理此问题的python模块?这是一种可能的方法: N = 10000000 i = 20670005000000 # The first part of the number i i // N # the s

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

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


在Python中,最整洁的方法是什么?是否有直接处理此问题的python模块?

这是一种可能的方法:

N = 10000000
i = 20670005000000

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

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

number = (int(str(number)[:len(number)/2]), int(str(number)[len(number)/2:]))
这将为您提供一个工具,您可以稍后使用。
您可以通过使用列表理解来进一步优化此操作。

假设每次都应在
中心对数字进行精确分割,我们可以使用
字符串和
切片来获得这两个数字

在此处使用单个数字:

>>> 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

这个问题中现有的操作模式似乎是将每个字符串值一分为二

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]]

您可以将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]
假设
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))

在我看来,它们就像子串。要将字符串>子字符串>解析为偶数
str(a)[:len(str(a))/2]、str(a)[len(str(a))/2:
、和
a=20670005000000
如果数字被转换为字符串,并且其长度是用
len
确定的,则认为是
算术
的,那么还有另一个想法吗
是整数除以2(
len(x)//2
)的算法吗?@wwii它试图找到中间点。如果op想要固定长度,它可以硬编码
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))