Home > Blockchain >  Split list of strings into constituent characters
Split list of strings into constituent characters

Time:04-04

I have these lines of code to split labels into characters and put them into a list.

Labels=[226md, 22d5n, 2356g, 23mdg, 23n88, 243mm,...]

def split(string):
    for i in range(len(labels)):
        return [char for char in string[i]]
for i in range(len(labels)):
    x=split(labels)
    print(x)

However, my output comes out as

['2', '2', '6', 'm', 'd']
['2', '2', '6', 'm', 'd']
['2', '2', '6', 'm', 'd']
['2', '2', '6', 'm', 'd']
['2', '2', '6', 'm', 'd']
['2', '2', '6', 'm', 'd']
...

instead of

['2', '2', '6', 'm', 'd']
['2', '2', 'd', '5', 'n']
['2', '3', '5', '6', 'g']
['2', '3', 'm', 'd', 'g']
['2', '3', 'n', '8', '8']
['2', '4', '3', 'm', 'm']
...

Each string is consistently 5 characters long. How can I get the preferred output so I can split each label into its constituent characters?

CodePudding user response:

This should work:

Labels=['226md', '22d5n', '2356g', '23mdg', '23n88', '243mm']

x = [[j for j in i] for i in Labels]

Value of x:

[['2', '2', '6', 'm', 'd'],
 ['2', '2', 'd', '5', 'n'],
 ['2', '3', '5', '6', 'g'],
 ['2', '3', 'm', 'd', 'g'],
 ['2', '3', 'n', '8', '8'],
 ['2', '4', '3', 'm', 'm']]

Or if you just want to print the output:

Labels=['226md', '22d5n', '2356g', '23mdg', '23n88', '243mm']

for i in Labels:
    print([j for j in i])

Output:

['2', '2', '6', 'm', 'd']
['2', '2', 'd', '5', 'n']
['2', '3', '5', '6', 'g']
['2', '3', 'm', 'd', 'g']
['2', '3', 'n', '8', '8']
['2', '4', '3', 'm', 'm']

Also, it is worth noting that you can swap [j for j in i] for just list(i). The reason your code does not work is because your return statement halts the execution of the code. Your split function (its name should be changed as split is a built in python function) could just be changed to this:

def split(string):
    return [list(i) for i in string]

And then change your for loop to just split(Labels).

CodePudding user response:

This happens because in the body of the method split you are always returning the characters of the first label. In fact the return statement halts the execution of the code and returns immidiately.

To achive the result you are describing you should save the rows into a cumulative variable and then return it when the loop has finished:

Labels=["226md", "22d5n", "2356g", "23mdg", "23n88", "243mm",...]

def split(labels):
    result = []
    for i in range(len(labels)):
        result.append([char for char in string[i]])
    return result

split(Labels)

Plus, this way you don't need the last loop outside the function body because you are already iterating through all labels into the split function.

  • Related