I want to merge element in the list based on given start and stop index of tuple (non-overlap for tuple). I\'ll leave the indices that don\'t mention as it is. This is my ex
Short "trick" with reversed merge
list:
ls = ['1', '2', '3', '4', '5', '6', '7']
merge = [(1, 3), (5, 7)]
for t in merge[::-1]:
merged = ''.join(ls[t[0]:t[1]]) # merging values within a range
ls[t[0]:t[1]] = [merged] # slice replacement
print(ls)
The output:
['1', '23', '4', '5', '67']
For the fun of it, because I've been learning Haskell, a recursive solution:
def recursive(ls, merge):
if merge == []:
return ls
else:
x, xs = merge[0], merge[1:]
return ls[:x[0]] + [''.join(ls[x[0]:x[1]])] + recursive(ls, xs)[x[1]:]
Only works if there are no overlapping intervals, however.
A quick-and-dirty solution would be:
ls = ['1', '2', '3', '4', '5', '6', '7']
merge = [(1, 3), (5, 7)]
result = []
index = 0
for start, end in merge:
result += ls[index:start]
result.append("".join(ls[start:end]))
index = end
print result # ['1', '23', '4', '5', '67']