Selectively replace multiple instances of a character within a string: Difference between revisions

Content added Content deleted
Line 574: Line 574:
def nthInstanceReplaced(ruleMap):
def nthInstanceReplaced(ruleMap):
def go(a, c):
def go(a, c):
if c in ruleMap:
if c in a:
i = a.get(c, 0)
ds = a.get(c)
deltas = ruleMap.get(c)
return (
return (
dict(a, **{c: 1 + i}),
dict(a, **{c: ds[1:]}),
deltas[i] or c if i < len(deltas) else c
ds[0] or c
)
) if ds else (a, c)
else:
else:
return a, c
return a, c


return lambda s: ''.join(
return lambda s: ''.join(
mapAccumL(go)({})(s)[1]
mapAccumL(go)(ruleMap)(s)[1]
)
)