How do I split a number into two without any arithmetic in python? For example, the table below:
20670005000000
30003387889032
44555008000004
I want the string to look like the columns below after splitting (and remain numbers that can be used in numerical analysis):
2067000 5000000
3000338 7889032
4455500 8000004
What's the neatest way to do this in Python? Is there a python module that deals with this directly?
6 Answers 6
This is a possible way:
N = 10000000
i = 20670005000000
# The first part of the number i
i // N
# the second part
i % N
-
1OP says:
"without any arithmetic"
musefan– musefan2017年10月12日 14:57:05 +00:00Commented Oct 12, 2017 at 14:57
I don't know if it is the best way, but you can convert to string, than split it, and convert it to integer again:
number = (int(str(number)[:len(number)/2]), int(str(number)[len(number)/2:]))
This will give you a touple which you can use later. You can further optimize this by using list comprehension.
you could map the int to str, then split it. remember convert it back to 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
output:
[2067000, 5000000, 3000338, 7889032, 4455500, 8000004]
Assuming str.len()
does not involve arithmetic and comparing two integers (2 > 3
) is NOT arithmetic:
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))
It seems that the existing pattern of operation in this problem is to divide each string value in half.
import re
s = [20670005000000, 30003387889032, 44555008000004]
final_string = [map(int, re.findall('.{'+str(len(str(i))//2)+'}', str(i))) for i in s]
Output:
[[2067000, 5000000], [3000338, 7889032], [4455500, 8000004]]
Assuming the number should be divided exactly at center
each time, we can use string
and slicing
of it to get the two numbers.
Doing with single number here :
>>> s = str(20670005000000)
>>> l = int(len(s)/2)
>>> a,b = s[:l],s[l:]
>>> int(a)
=> 2067000
>>> int(b)
=> 5000000
Here, for the List of numbers :
for ele in map(str,arr):
l = int( len(ele)/2 )
a,b = ele[:l], ele[l:]
print(int(a), int(b))
# driver values
IN : arr = [20670005000000, 30003387889032, 44555008000004]
OUT : 2067000 5000000
3000338 7889032
4455500 8000004
Explore related questions
See similar questions with these tags.
str(a)[:len(str(a))/2], str(a)[len(str(a))/2:]
, anda=20670005000000
len
is that consideredarithmetic
?