For Binary seperation, which would be better:using list or divmod?
up vote
2
down vote
favorite
I'm trying to divide the binary string from the end, by constant length:for example, '1001011000'
by 3->['1','001','011','000']
.
starting with the number 600,
def bin_divby(dec,leng):
n = 0
mid_res = ''
res=list()
for nums in bin(dec)[2:][::-1]:
n+=1
mid_res+=nums
if not n%leng:
res+=[mid_res[::-1]]
mid_res=''
if n%leng:
res+=[mid_res[::-1]]
return res[::-1]
(I'm not sure but code were kind of like this)
Using for loop with few variable would make it work, but I'm curious if using divmod would make it much faster. or would base conversion would be better? I thought using Binary form would be effective than re-calculating once more by divmod, but well as you see, I'm using much variable and functions as well. For repeating thousands of calculations, which would be better?
python binary base
add a comment |
up vote
2
down vote
favorite
I'm trying to divide the binary string from the end, by constant length:for example, '1001011000'
by 3->['1','001','011','000']
.
starting with the number 600,
def bin_divby(dec,leng):
n = 0
mid_res = ''
res=list()
for nums in bin(dec)[2:][::-1]:
n+=1
mid_res+=nums
if not n%leng:
res+=[mid_res[::-1]]
mid_res=''
if n%leng:
res+=[mid_res[::-1]]
return res[::-1]
(I'm not sure but code were kind of like this)
Using for loop with few variable would make it work, but I'm curious if using divmod would make it much faster. or would base conversion would be better? I thought using Binary form would be effective than re-calculating once more by divmod, but well as you see, I'm using much variable and functions as well. For repeating thousands of calculations, which would be better?
python binary base
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I'm trying to divide the binary string from the end, by constant length:for example, '1001011000'
by 3->['1','001','011','000']
.
starting with the number 600,
def bin_divby(dec,leng):
n = 0
mid_res = ''
res=list()
for nums in bin(dec)[2:][::-1]:
n+=1
mid_res+=nums
if not n%leng:
res+=[mid_res[::-1]]
mid_res=''
if n%leng:
res+=[mid_res[::-1]]
return res[::-1]
(I'm not sure but code were kind of like this)
Using for loop with few variable would make it work, but I'm curious if using divmod would make it much faster. or would base conversion would be better? I thought using Binary form would be effective than re-calculating once more by divmod, but well as you see, I'm using much variable and functions as well. For repeating thousands of calculations, which would be better?
python binary base
I'm trying to divide the binary string from the end, by constant length:for example, '1001011000'
by 3->['1','001','011','000']
.
starting with the number 600,
def bin_divby(dec,leng):
n = 0
mid_res = ''
res=list()
for nums in bin(dec)[2:][::-1]:
n+=1
mid_res+=nums
if not n%leng:
res+=[mid_res[::-1]]
mid_res=''
if n%leng:
res+=[mid_res[::-1]]
return res[::-1]
(I'm not sure but code were kind of like this)
Using for loop with few variable would make it work, but I'm curious if using divmod would make it much faster. or would base conversion would be better? I thought using Binary form would be effective than re-calculating once more by divmod, but well as you see, I'm using much variable and functions as well. For repeating thousands of calculations, which would be better?
python binary base
python binary base
edited Nov 11 at 20:13
Willem Van Onsem
142k16134225
142k16134225
asked Nov 11 at 20:12
ILoveG11
325
325
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
3
down vote
accepted
We can use list comprehension for this:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
return [bn[i:i+leng][::-1] for i in range(0, len(bn), leng)][::-1]
we can slightly improve efficiency by reversing the range(..)
object:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
n = len(bn) - 1
return [bn[i:i+leng][::-1] for i in range(n - n%leng, -leng, -leng)]
So here we first obtain the binary string in reverse, and then we iterate over that string, and each time slice the string. The end result is reversed.
This produces the expected:
>>> bin_divby(0b1001011000, 1)
['1', '0', '0', '1', '0', '1', '1', '0', '0', '0']
>>> bin_divby(0b1001011000, 2)
['10', '01', '01', '10', '00']
>>> bin_divby(0b1001011000, 3)
['1', '001', '011', '000']
>>> bin_divby(0b1001011000, 4)
['10', '0101', '1000']
>>> bin_divby(0b1001011000, 5)
['10010', '11000']
>>> bin_divby(0b1001011000, 6)
['1001', '011000']
>>> bin_divby(0b1001011000, 7)
['100', '1011000']
It's being three times more faster than original! May I ask about 'struct' : would unpacking directly from it would be faster?
– ILoveG11
Nov 12 at 5:46
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
We can use list comprehension for this:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
return [bn[i:i+leng][::-1] for i in range(0, len(bn), leng)][::-1]
we can slightly improve efficiency by reversing the range(..)
object:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
n = len(bn) - 1
return [bn[i:i+leng][::-1] for i in range(n - n%leng, -leng, -leng)]
So here we first obtain the binary string in reverse, and then we iterate over that string, and each time slice the string. The end result is reversed.
This produces the expected:
>>> bin_divby(0b1001011000, 1)
['1', '0', '0', '1', '0', '1', '1', '0', '0', '0']
>>> bin_divby(0b1001011000, 2)
['10', '01', '01', '10', '00']
>>> bin_divby(0b1001011000, 3)
['1', '001', '011', '000']
>>> bin_divby(0b1001011000, 4)
['10', '0101', '1000']
>>> bin_divby(0b1001011000, 5)
['10010', '11000']
>>> bin_divby(0b1001011000, 6)
['1001', '011000']
>>> bin_divby(0b1001011000, 7)
['100', '1011000']
It's being three times more faster than original! May I ask about 'struct' : would unpacking directly from it would be faster?
– ILoveG11
Nov 12 at 5:46
add a comment |
up vote
3
down vote
accepted
We can use list comprehension for this:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
return [bn[i:i+leng][::-1] for i in range(0, len(bn), leng)][::-1]
we can slightly improve efficiency by reversing the range(..)
object:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
n = len(bn) - 1
return [bn[i:i+leng][::-1] for i in range(n - n%leng, -leng, -leng)]
So here we first obtain the binary string in reverse, and then we iterate over that string, and each time slice the string. The end result is reversed.
This produces the expected:
>>> bin_divby(0b1001011000, 1)
['1', '0', '0', '1', '0', '1', '1', '0', '0', '0']
>>> bin_divby(0b1001011000, 2)
['10', '01', '01', '10', '00']
>>> bin_divby(0b1001011000, 3)
['1', '001', '011', '000']
>>> bin_divby(0b1001011000, 4)
['10', '0101', '1000']
>>> bin_divby(0b1001011000, 5)
['10010', '11000']
>>> bin_divby(0b1001011000, 6)
['1001', '011000']
>>> bin_divby(0b1001011000, 7)
['100', '1011000']
It's being three times more faster than original! May I ask about 'struct' : would unpacking directly from it would be faster?
– ILoveG11
Nov 12 at 5:46
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
We can use list comprehension for this:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
return [bn[i:i+leng][::-1] for i in range(0, len(bn), leng)][::-1]
we can slightly improve efficiency by reversing the range(..)
object:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
n = len(bn) - 1
return [bn[i:i+leng][::-1] for i in range(n - n%leng, -leng, -leng)]
So here we first obtain the binary string in reverse, and then we iterate over that string, and each time slice the string. The end result is reversed.
This produces the expected:
>>> bin_divby(0b1001011000, 1)
['1', '0', '0', '1', '0', '1', '1', '0', '0', '0']
>>> bin_divby(0b1001011000, 2)
['10', '01', '01', '10', '00']
>>> bin_divby(0b1001011000, 3)
['1', '001', '011', '000']
>>> bin_divby(0b1001011000, 4)
['10', '0101', '1000']
>>> bin_divby(0b1001011000, 5)
['10010', '11000']
>>> bin_divby(0b1001011000, 6)
['1001', '011000']
>>> bin_divby(0b1001011000, 7)
['100', '1011000']
We can use list comprehension for this:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
return [bn[i:i+leng][::-1] for i in range(0, len(bn), leng)][::-1]
we can slightly improve efficiency by reversing the range(..)
object:
def bin_divby(dec, leng):
bn = bin(dec)[:1:-1]
n = len(bn) - 1
return [bn[i:i+leng][::-1] for i in range(n - n%leng, -leng, -leng)]
So here we first obtain the binary string in reverse, and then we iterate over that string, and each time slice the string. The end result is reversed.
This produces the expected:
>>> bin_divby(0b1001011000, 1)
['1', '0', '0', '1', '0', '1', '1', '0', '0', '0']
>>> bin_divby(0b1001011000, 2)
['10', '01', '01', '10', '00']
>>> bin_divby(0b1001011000, 3)
['1', '001', '011', '000']
>>> bin_divby(0b1001011000, 4)
['10', '0101', '1000']
>>> bin_divby(0b1001011000, 5)
['10010', '11000']
>>> bin_divby(0b1001011000, 6)
['1001', '011000']
>>> bin_divby(0b1001011000, 7)
['100', '1011000']
edited Nov 11 at 20:31
answered Nov 11 at 20:22
Willem Van Onsem
142k16134225
142k16134225
It's being three times more faster than original! May I ask about 'struct' : would unpacking directly from it would be faster?
– ILoveG11
Nov 12 at 5:46
add a comment |
It's being three times more faster than original! May I ask about 'struct' : would unpacking directly from it would be faster?
– ILoveG11
Nov 12 at 5:46
It's being three times more faster than original! May I ask about 'struct' : would unpacking directly from it would be faster?
– ILoveG11
Nov 12 at 5:46
It's being three times more faster than original! May I ask about 'struct' : would unpacking directly from it would be faster?
– ILoveG11
Nov 12 at 5:46
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53252774%2ffor-binary-seperation-which-would-be-betterusing-list-or-divmod%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown