[ python-Feature Requests-1184678 ] "replace" function should
accept lists.
SourceForge.net
noreply at sourceforge.net
Sat Apr 30 14:30:59 CEST 2005
Feature Requests item #1184678, was opened at 2005-04-17 11:05
Message generated for change (Comment added) made by rhettinger
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=355470&aid=1184678&group_id=5470
Category: None
Group: None
Status: Open
Resolution: Rejected
Priority: 5
Submitted By: Poromenos (poromenos)
Assigned to: Nobody/Anonymous (nobody)
Summary: "replace" function should accept lists.
Initial Comment:
It would be nice if the "replace" function accepted lists/
tuples and replaced each item in the "old" list with the
corresponding item in the "new" list.
----------------------------------------------------------------------
>Comment By: Raymond Hettinger (rhettinger)
Date: 2005-04-30 07:30
Message:
Logged In: YES
user_id=80475
Sorry, am not going to gum up the API for this. It doesn't
come up much and when it does it is an easy problem.
Each additional option on a function makes it harder to
learn, use, and remember. Likewise, it complicates maintenance.
Also, this one has its own complexities that make it worth
avoiding (examples can be contrived when the for-loop
version produces a different result than replacing each
match as found).
A good implementation would take time. It would involve
regexps and have to be done for unicode objects.
----------------------------------------------------------------------
Comment By: Poromenos (poromenos)
Date: 2005-04-30 04:48
Message:
Logged In: YES
user_id=267121
That is true, the alternative loop is quite usable, but the API
change would be backwards-compatible, and the
implementation is not very difficult... I just see this as a nice
feature of replace, it's not really necessary if it'll break other
stuff.
----------------------------------------------------------------------
Comment By: Raymond Hettinger (rhettinger)
Date: 2005-04-29 09:10
Message:
Logged In: YES
user_id=80475
Given the multiple alternative input matches, this is a job
for regular expressions. See the string.substitute() source
code for an approach to making the transformation you outlined.
I do not think multi-replace is sufficiently common to
warrant a change to the API. If needed and if the regexp
solution is too hard, then a regular for-loop is a
reasonable alternative:
for old, new in zip(oldlist, newlist):
s = s.replace(old, new)
----------------------------------------------------------------------
Comment By: Poromenos (poromenos)
Date: 2005-04-29 08:03
Message:
Logged In: YES
user_id=267121
There was an oversight on my part... Translate can only be
used to change individual characters, what I am proposing
could replace strings of multiple characters, essentially
concatenating multiple replace()s in one:
>>> "h.w".replace(["h", ".", "w"], ["Hello", " ", "World!"])
'Hello, World!'
----------------------------------------------------------------------
Comment By: Poromenos (poromenos)
Date: 2005-04-18 17:23
Message:
Logged In: YES
user_id=267121
Ah, I did not know that... The docs are a bit complicated on .
translate, but since it can do that, yes, it would be unwise to
implement my suggestion.
----------------------------------------------------------------------
Comment By: Raymond Hettinger (rhettinger)
Date: 2005-04-18 17:20
Message:
Logged In: YES
user_id=80475
I'm -1 on complicating str.replace()'s API for functionality
that substantially duplicates that offered by str.translate():
>>> "Hello world".translate(string.maketrans('ed', 'ae'))
'Hallo worle'
----------------------------------------------------------------------
Comment By: Poromenos (poromenos)
Date: 2005-04-18 16:15
Message:
Logged In: YES
user_id=267121
Hmm, actually I was requesting that string.replace() accepted
lists of substitutions, like so:
>>> "Hello world".replace(["e", "d"], ["a", "e"])
'Hallo worle'
But your suggestion would also be very useful.
----------------------------------------------------------------------
Comment By: Raymond Hettinger (rhettinger)
Date: 2005-04-18 16:11
Message:
Logged In: YES
user_id=80475
Are you requesting that lists be given a replace() method
that parallels the replace() method for strings?
def replace(self, old, new):
result = []
for elem in self:
if elem == old:
result.append(new)
else:
result.append(elem)
self[:] = result
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=355470&aid=1184678&group_id=5470
More information about the Python-bugs-list
mailing list