在列表中替换元组内的字符串

5

我目前有以下清单:

data = [('b','..','o','b'),('t','s','..','t')]

我正在尝试找到一种方法来将所有".. "字符串替换为其他字符串。在我的实例中,字符串是' '。

我尝试使用内置函数来执行以下方法,但没有成功。

newData = list(map(lambda i: str.replace(i, ".."," "), data))

有人能指点我正确的方向吗?我想要输出以下内容:
newData = [('b',' ','o','b'),('t','s',' ','t')]
2个回答

3
你可以使用一个带有条件表达式的列表推导式来解决问题,具体请参考列表推导式条件表达式
>>> 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')]
>>>

谢谢!这个完美无缺地运行了。我理解变量s的作用,但是你能否解释一下“tup”变量的目的? - taytortot
1
@taytortot - 当然可以。for tup in data子句将遍历列表data中的每个项目(元组)。它将取出每个项目,将其存储在变量tup中,然后将其发送到tuple(s if s != ".." else " " for s in tup)部分。我将变量命名为tup以表示“元组”。 - user2555451
@iCodez 如果您展示等效的嵌套for循环,那么展示tup变量的作用可能会更容易理解。 - SethMMorton

3

Map函数对给定列表中的每个元素进行操作。因此,在这种情况下,你的lambda表达式被调用时是在一个元组上,而不是像你打算的那样在元组的元素上。

将代码放入列表推导式中即可解决:

newData = [tuple(map(lambda i: str.replace(i, ".."," "), tup)) for tup in data]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接