how to restructure data in python

Question:

I’m new to Python. I need to restructure the inputed string data into entered/separated by carriage return characters like this one:

Input: D A P U R
       N U W A Y

Output: D   N
        A   U
        P   W
        U   A
        R   Y

I tried to use the replace() method but nothing solved. Below is my current code:

txt = input("Enter text: ")

def textSeparation(txt):
    t = txt.replace(" ", "rn")
    return t

res = textSeparation(txt)
print(res)

The inputed string is basicly separated by space characters. Is there any built-in function in Python to do this?

I have tried using built-in replace() to replace the space char with rn but nothing solved.

Asked By: danuw

||

Answers:

I am pretty sure there is a better way out there. But here is something that can do the job.

Note: Only works for this particular structure and equal number of characters.

First, I will assume that your input looks something like this:

input_string = "D A P U RnN U W A Y"

Output:

D A P U R
N U W A Y

What you can do is
1- split the string on the line separator (n)
2- convert each line to its list of characters
3- convert the result to a numpy array
4- transpose the array
5- join each row to form a string
6- join all rows to form a full string
This is done in this function:

def transpose_input(input_string):
    return 'n'.join([' '.join(l) for l in np.array([list(line.replace(' ', '')) for line in input_string.split('n')]).T.tolist()])

Test:

input_string = "D A P U RnN U W A Y"
new_string = transpose_input(input_string)

print(new_string)

Output:

D N
A U
P W
U A
R Y

Edit: without using numpy

def transpose_input(input_string):
    return 'n'.join([' '.join(l) for l in list(zip(*input.replace(' ', '').split('n')))])

Test:

input_string = "D A P U RnN U W A Y"
new_string = transpose_input(input_string)

print(new_string)

Output:

D N
A U
P W
U A
R Y

Edit 2: only if space separated

def transpose_input(input_string):
    return 'n'.join([' '.join(l) for l in list(zip(*[r.split(' ') for r in input_string.split('n')]))])
Answered By: D.Manasreh
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.