Home > Mobile >  How to construct a string from letters of each word from list?
How to construct a string from letters of each word from list?

Time:11-15

I am wondering how to construct a string, which takes 1st letter of each word from list. Then it takes 2nd letter from each word etc. For example : Input --> my_list = ['good', 'bad', 'father'] Every word has different length (but the words in the list could have equal length) The output should be: 'gbfoaaodtdher'.

I tried:

def letters(my_list):
    string = ''

    for i in range(len(my_list)):
        for j in range(len(my_list)):
            string  = my_list[j][i]

    return string

print(letters(['good', 'bad', 'father']))

and I got: 'gbfoaaodt'.

CodePudding user response:

That's a good job for itertools.zip_longest:

from itertools import zip_longest

s = ''.join([c for x in zip_longest(*my_list) for c in x if c])
print(s)

Or more_itertools.interleave_longest:

from more_itertools import interleave_longest

s = ''.join(interleave_longest(*my_list))
print(s)

Output: gbfoaaodtdher

Used input:

my_list = ['good', 'bad', 'father']

CodePudding user response:

The answer by @mozway is the best approach, but if you want to go along with your original method, this is how

def letters(my_list):
    string = ''

    max_len = max([len(s) for s in my_list])

    for i in range(max_len):
        for j in range(len(my_list)):
            if i < len(my_list[j]):
                string  = my_list[j][i]

    return string

print(letters(['good', 'bad', 'father']))

Output: gbfoaaodtdher

CodePudding user response:

We can do without zip_longest as well:

l = ['good', 'bad', 'father']
longest_string=max(l,key=len)
''.join(''.join([e[i] for e in l if len(e) > i]) for i in range(len(longest_string)))

#'gbfoaaodtdher'
  • Related