【问题标题】: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')]

【问题讨论】:

    标签: python arrays list replace tuples


    【解决方案1】:

    您可以将list comprehensionconditional 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]
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 2021-12-19
      • 2021-05-22
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多