从列表中的元组替换字符串
Posted
技术标签:
【中文标题】从列表中的元组替换字符串【英文标题】:Replace String From Tuple Inside List 【发布时间】:2014-05-29 00:26:43 【问题描述】:我目前有以下列表:
data = [('b','..','o','b'),('t','s','..','t')]
我正在尝试找出一种方法将“..”字符串的所有实例替换为另一个字符串。在我的例子中,字符串 ' '。
我曾尝试通过以下方法使用内置函数,但没有成功。
newData = list(map(lambda i: str.replace(i, ".."," "), data))
有人能指出我正确的方向吗?我想要的输出如下:
newData = [('b',' ','o','b'),('t','s',' ','t')]
【问题讨论】:
【参考方案1】:您可以将list comprehension 与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')]
>>>
【讨论】:
谢谢!这完美无缺。我知道 s 的变量在哪里起作用,但你能向我解释一下“tup”变量的用途吗? @taytortot - 当然可以。for tup in data
子句将遍历列表data
中的每个项目(元组)。它将获取每一个,将其存储在变量tup
中,然后将其发送到tuple(s if s != ".." else " " for s in tup)
部分。我将变量命名为tup
来表示“元组”。
@iCodez 如果显示等效的嵌套 for
循环,可能更容易显示 tup
变量的用途。【参考方案2】:
Map 对给定列表的每个元素进行操作。所以在这种情况下,你的 lambda 表达式被调用在一个元组上,而不是你想要的元组的元素。
将您的代码包装在列表理解中即可:
newData = [tuple(map(lambda i: str.replace(i, ".."," "), tup)) for tup in data]
【讨论】:
以上是关于从列表中的元组替换字符串的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 替换列中的值,但 to_replace 参数是包含元组的元组