Search code examples
pythonpgp

How you can unite-merge parts of a sliced string?


Is there a way to join-merge a sliced string in python so you can get the original string after the slicing? If not with what language this can be achieved?
I did edit i hope it will help.

I have a text example bellow
begining of pre-sliced text:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
End of pre-sliced text

I slice the text with s[start:stop:step] and in this example i sliced it in 2 parts

s = """abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz"""
#part 1 result
print (s[0::2])
#part 2 result
print (s[1::2])


How can I join the results part1 and part2 so I will get the original pre-sliced text.
Original pre-sliced text.
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

Thank you all for your effort.


Based on Stephan's fourth reply.

>>> s, t = """acegikmoqsuwy
... bdfhjlnprtvxz""", """bdfhjlnprtvxzacegikmoqsuwy"""
>>> tmp = list(s + t)
>>> tmp[0::2], tmp[1::2] = s, t
>>> print(''.join(tmp))
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

using it to slice a PGP message in 3

s = """hQEMA1H5MO53CAz0AQf+PoxwzD+9TYqGg61W/ng8Umi+mFPneIC4+JlMu2H4mCsx
AzO5APdXJJHRFjSpS01ZeKQQ05xEeHCnjgmWEFCWUVXW77kd/YI9Q01QIyoo8J6y
b9Wu4uFPQiCy2+Fr4SIKtrpOrsbrqG54BPFY66NeQ9NbG217QCbcaUlXHpmokiIc
6T94uTkLRo+Lv2QWzMBfyfyWbuU2lwD+7dD45oRB7cXInM9jQDHL8FKcFutTxPXh
8w/8eCZtPOQwCAX+vnRFT4DtgDotRdagDEswtuPTd8YbpemIa/C01ylExgIVvtLP
JwimeWx9d+nJgL2nx2emaYzN0vNQStOQceWtYxbbJdJJAXniDi7+HApeHyN2JcKu
LFjdTQFaQB0JGdloIXSJBqhOCMXBfd7mJ5c9sY6abE4bfP9/znbqT35y3GVU9RyX
NVKOujgxzi0/xQ==
=DvXG"""
print (s[0::3])
print (s[1::3])
print (s[2::3])

and joining it

>>> s, t, d = """hMHOC0foz9q6/8iFe4l2mxzAXHjSZQ5enmFUWkYQQoJ
WuQyFStObGBYN9G7bUHoI64kovWBfb2Dd5BXMQLKuxhwetQAvFDDRgsudbm/1EIt
iWdJ22aNNtctbdAi7AH2KLdFBGoSqCB75sa4Pzq5G9XVux0Q
v""", """QA55AA+xDTG1nU+PI+MHC
OPJRS0eQxHjWCV7dI0Io6buFi2rIrrr5P6eN2QclpkcTuL+2zfyul+Do7I9D8ctP
/CPwXnTtodDwP8pICyxVLJmx+gneY0QOeYbJXD+pyJuFTa0dIJhMfmcYbb9nTyVR
Kjz/==X""", """E1M3zQPw+YgWgmmnCJu4sA5dJFp1K0ECgEWX7/91y8y94PC+4Kpsq4F6Qb1CaXmi
9TRLQMyWUw74RcnjHFFTX88ZOC+R4gtaEtTYea0lgvPwe9nLxmzvSQWxJJniHeNc
jQQJlXBOXdJ96Ef/b33UyNOgix=DG"""
tmp = list(s + t + d)
tmp[0::3], tmp[1::3], tmp[2::3] = s, t, d
print(''.join(tmp))


you get the Original PGP message
hQEMA1H5MO53CAz0AQf+PoxwzD+9TYqGg61W/ng8Umi+mFPneIC4+JlMu2H4mCsx
AzO5APdXJJHRFjSpS01ZeKQQ05xEeHCnjgmWEFCWUVXW77kd/YI9Q01QIyoo8J6y
b9Wu4uFPQiCy2+Fr4SIKtrpOrsbrqG54BPFY66NeQ9NbG217QCbcaUlXHpmokiIc
6T94uTkLRo+Lv2QWzMBfyfyWbuU2lwD+7dD45oRB7cXInM9jQDHL8FKcFutTxPXh
8w/8eCZtPOQwCAX+vnRFT4DtgDotRdagDEswtuPTd8YbpemIa/C01ylExgIVvtLP
JwimeWx9d+nJgL2nx2emaYzN0vNQStOQceWtYxbbJdJJAXniDi7+HApeHyN2JcKu
LFjdTQFaQB0JGdloIXSJBqhOCMXBfd7mJ5c9sY6abE4bfP9/znbqT35y3GVU9RyX
NVKOujgxzi0/xQ==
=DvXG


Solution

  • If the two parts have equal length:

    >>> s, t = 'acegikmoqsuwy', 'bdfhjlnprtvxz'
    >>> print(''.join(a + b for a, b in zip(s, t)))
    abcdefghijklmnopqrstuvwxyz
    

    If they're don't:

    >>> s, t = 'acegikmoqsuwy\nbdfhjlnprtvxz', 'bdfhjlnprtvxzacegikmoqsuwy'
    >>> from itertools import zip_longest
    >>> print(''.join(a + b for a, b in zip_longest(s, t, fillvalue='')))
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz
    

    Or:

    >>> s, t = 'acegikmoqsuwy\nbdfhjlnprtvxz', 'bdfhjlnprtvxzacegikmoqsuwy'
    >>> tmp = list(s + t)
    >>> tmp[0::2], tmp[1::2] = s, t
    >>> print(''.join(tmp))
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz
    

    Or:

    >>> s, t = 'acegikmoqsuwy\nbdfhjlnprtvxz', 'bdfhjlnprtvxzacegikmoqsuwy'
    >>> print(''.join((s, t)[i % 2][i // 2] for i in range(len(s + t))))
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz