Kathiravan Saimoorthy
Kathiravan Saimoorthy

Reputation: 87

add a character to a list python

I have a list of items, say x = ['Zwi', 'sche', 'n', 'ab', 'schlus', 'ses'] I am trying to write a loop to add hyphen between one word at a time and the result should be something like below:

Zwi-schenabschlusses
Zwische-nabschlusses
Zwischen-abschlusses
Zwischenab-schlusses
Zwischenabschlus-ses

Can anyone help me?

Upvotes: 0

Views: 110

Answers (8)

Fuji Komalan
Fuji Komalan

Reputation: 2047

strs = ['Zwi', 'sche', 'n', 'ab', 'schlus', 'ses'] 

for index in range(1,len(strs)):

    out = '{}-{}'.format(''.join(strs[0:index]),''.join(strs[index:])) 
    print(out)


Zwi-schenabschlusses
Zwische-nabschlusses
Zwischen-abschlusses
Zwischenab-schlusses
Zwischenabschlus-ses

Upvotes: 1

kederrac
kederrac

Reputation: 17322

you can use list comprehension with f-strings:

print(*[f"{''.join(x[:i])}-{''.join(x[i:])}"  for i in range(1, len(x))], sep='\n')

output:

Zwi-schenabschlusses
Zwische-nabschlusses
Zwischen-abschlusses
Zwischenab-schlusses
Zwischenabschlus-ses

or you can use a generator with join method:

def generate_str(x):
    add_word = ''
    for word_index, word in enumerate(x[:-1]):
        add_word += word
        yield f"{add_word}-{''.join(x[word_index + 1:])}"

print('\n'.join(generate_str(x)))

output:

Zwi-schenabschlusses
Zwische-nabschlusses
Zwischen-abschlusses
Zwischenab-schlusses
Zwischenabschlus-ses

Upvotes: 1

ecehttp
ecehttp

Reputation: 66

x = ['Zwi', 'sche', 'n', 'ab', 'schlus', 'ses']
d = [''.join(x[:range_]) + "-" +''.join(x[range_:]) for range_ in range(1, len(x))]

outputs:

['Zwi-schenabschlusses',
 'Zwische-nabschlusses',
 'Zwischen-abschlusses',
 'Zwischenab-schlusses',
 'Zwischenabschlus-ses']

Upvotes: 1

Kelly Bundy
Kelly Bundy

Reputation: 27588

Just stuffing the hyphen into any place...

for i in range(1, len(x)):
    print(''.join(x[:i] + ['-'] + x[i:]))

Upvotes: 2

Rahul Goel
Rahul Goel

Reputation: 880

x = ['Zwi', 'sche', 'n', 'ab', 'schlus', 'ses']
combinedStr = ''.join(x)
output = []
slicing_counter = 0
for index in range(len(x) - 1):
    len_substring = len(x[index])
    slicing_counter = slicing_counter + len_substring
    output.append(combinedStr[0:slicing_counter] + '-' + combinedStr[slicing_counter:])
print(output)

Upvotes: 0

abhiarora
abhiarora

Reputation: 10430

One liner in Python using list comprehension:

x = ['Zwi', 'sche', 'n', 'ab', 'schlus', 'ses']
print([("".join(x[0:i]) + "-" + "".join(x[i:])) for i in range(1,len(x))])

Output:

['Zwi-schenabschlusses', 'Zwische-nabschlusses', 'Zwischen-abschlusses', 'Zwischenab-schlusses', 'Zwischenabschlus-ses']

Upvotes: 1

Vishal Gada
Vishal Gada

Reputation: 211

Below code should work:

x = ['Zwi', 'sche', 'n', 'ab', 'schlus', 'ses']
modifiedX = []
for i in range(len(x) - 1):
    newString = ""
    for j in range(len(x)):
        if j == i + 1:
            newString += "-"
        newString += x[j]
    modifiedX.append(newString)
print(modifiedX)

Output:

['Zwi-schenabschlusses', 'Zwische-nabschlusses', 'Zwischen-abschlusses', 'Zwischenab-schlusses', 'Zwischenabschlus-ses']

Upvotes: 1

Sociopath
Sociopath

Reputation: 13401

you can do

x = ['Zwi', 'sche', 'n', 'ab', 'schlus', 'ses']

s = "".join(x)
# Zwischenabschlusses

y = []
cumlen = 0
for i in x[:-1]:
    cumlen += len(i) 
    y.append(s[:cumlen]+"-"+s[cumlen:])

print(y)

Output:

['Zwi-schenabschlusses', 'Zwische-nabschlusses', 'Zwischen-abschlusses', 'Zwischenab-schlusses', 'Zwischenabschlus-ses']

Upvotes: 3

Related Questions