【问题标题】:replace multiple strings in a list with a single string by knowing the index通过知道索引用单个字符串替换列表中的多个字符串
【发布时间】:2022-12-06 18:32:09
【问题描述】:

我想通过知道索引用单个字符串替换列表中的多个字符串。当然我看了这个问题:search for element in list and replace it by multiple items 但是对于我的情况是相反的,假设我有一个列表如下:

lst = ['a', 'b1', 'b2', 'b3', 'c']

我知道我有一个词:

term = 'b1' + ' b2' + ' b3'

我也知道起始索引和该术语的长度

lst[1:1+len(term)] = "<term>" + term + "</term>"

我得到了这个结果:

['a', '<', 't', 'e', 'r', 'm', '>', 'b', '1', ' ', 'b', '2', ' ', 'b', '3', '<', '/', 't', 'e', 'r', 'm', '>']

但是,我的预期输出:

['a', '<term>b1 b2 b3</term>', 'c']

我如何调整它以获得所需的输出?

【问题讨论】:

  • 那是因为你改变了一个列表。但为什么您的预期输出以“b”结尾?虽然 len(term) 很长(实际上是 8,所有字符)。因此它将覆盖您的整个列表。
  • 您预期输出的最后一个索引是否正确? 'b'?不应该是'c'吗?
  • 编辑问题抱歉!
  • 一切都好@Erwin!

标签: python string list


【解决方案1】:

使用您的lstterm 列表,将字符串连接成一个字符串:term_string = "&lt;term&gt;" + " ".join(term) + "&lt;/term&gt;"

然后切片用连接的字符串替换字符串:lst[1:1+len(term)] = [term_string]

【讨论】:

  • 在问题中 term 是一个字符串,但我想它应该是这个答案中假设的一个列表。
  • 啊抱歉,读得太快了。是的,将术语定义为列表以使用.join(...)term = ['b1', 'b2', 'b3']
【解决方案2】:

编辑您的代码,以便在 lst[1:-1] 中插入一个列表:

lst = ['a', 'b1', 'b2', 'b3', 'c']
term = 'b1' + ' b2' + ' b3'
lst[1:-1] = ["<term>" + term + "</term>"]
print(lst)
>> ['a', '<term>b1 b2 b3</term>', 'c']

如您所见,我还将索引从 lst[1:len(term)+1] 更改为 lst[1:-1],这样您就可以保留第一项和最后一项。

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多