-1

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?

Sociopath
  • 11,667
  • 16
  • 38
  • 61

8 Answers8

3

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']
Sociopath
  • 11,667
  • 16
  • 38
  • 61
2

Just stuffing the hyphen into any place...

for i in range(1, len(x)):
    print(''.join(x[:i] + ['-'] + x[i:]))
Kelly Bundy
  • 5,629
  • 1
  • 5
  • 31
1

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']
Sociopath
  • 11,667
  • 16
  • 38
  • 61
Vishal Gada
  • 159
  • 2
  • 10
1

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']
abhiarora
  • 7,515
  • 3
  • 27
  • 46
1
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']
ecehttp
  • 56
  • 5
1

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
kederrac
  • 15,339
  • 4
  • 25
  • 45
1
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
Fuji Komalan
  • 1,693
  • 9
  • 24
0
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)
Rahul Goel
  • 634
  • 1
  • 5
  • 10