Reputation: 99
I currently have the following list:
data = [('b','..','o','b'),('t','s','..','t')]
I am trying to figure out a way to replace all instances of the '..' string to another string. In my instance, the string of ' '.
I have attempted to use the built-in function using the following method, but had no luck.
newData = list(map(lambda i: str.replace(i, ".."," "), data))
Could someone point me in the right direction? My desired output would be the following:
newData = [('b',' ','o','b'),('t','s',' ','t')]
Upvotes: 5
Views: 15915
Reputation: 1088
Map operates on each of the elements of the list given. So in this case, your lambda expression is being called on a tuple, not the elements of the tuple as you intended.
wrapping your code in a list comprehension would do it:
newData = [tuple(map(lambda i: str.replace(i, ".."," "), tup)) for tup in data]
Upvotes: 3
Reputation:
You can use a list comprehension with a conditional expression:
>>> data = [('b','..','o','b'),('t','s','..','t')]
>>> newData = [tuple(s if s != ".." else " " for s in tup) for tup in data]
>>> newData
[('b', ' ', 'o', 'b'), ('t', 's', ' ', 't')]
>>>
Upvotes: 3