【问题标题】:String formatting "in-place"字符串格式“就地”
【发布时间】:2022-07-07 18:24:20
【问题描述】:

我有包含占位符 {} 的字符串(str 列表),并希望将变量值包含到这些占位符中。这种字符串的一个例子是'test_variable = {}'。 我需要在列表中找到我要处理的索引,并按照描述替换{}

目前,代码如下所示,find_occurrence_in_str_list() 是一个返回列表中第一次出现的搜索字符串的简单函数:

def find_occurrence_in_str_list(lines, findstr, start_index=0):
    for i in range(start_index, len(lines)):
        if findstr in lines[i]:
            return i

# Examples
variable_value = 10
strlist = ['example = {}', 'test_variable = {}']
# Code in question
index = find_occurrence_in_str_list(strlist, 'test_variable')
strlist[index] = strlist[index].format(variable_value)

这完全没问题。但是,由于我有很多这样的替换,因此需要更好的可读性,尤其是单行,而不是最后两行。目前,我只是想出了这个,它调用了两次搜索函数并且不是真的更具可读性:

strlist[find_occurrence_in_str_list(strlist, 'test_variable')] = strlist[find_occurrence_in_str_list(strlist, 'test_variable')].format(variable_value)

有什么方法可以就地格式化字符串,而不是只返回新字符串并需要手动替换它?

【问题讨论】:

  • 如果您的代码按预期工作,那么问题出在哪里?
  • 您可以轻松地将您的:Code in question 转换为新功能。
  • 你的函数可以添加一个value参数,然后将return i改为lines[i] = lines[i].format(value)。之后,您可以拨打find_occurrence_in_str_list(strlist, 'test_variable', variable_value)

标签: python


【解决方案1】:

IIUC,您应该调整模板以包含命名占位符。

演示:

>>> lines = '''example = {example}
... test_variable = {test_variable}'''
>>> print(lines.format(example='ex', test_variable=1))
example = ex
test_variable = 1

【讨论】:

    【解决方案2】:

    你可以结合使用 str.replace() 和你的函数

    def find_occurrence_in_str_list(lines, findstr,value, start_index=0):
    for i in range(start_index, len(lines)):
        if findstr in lines[i]:
            lines[i] = lines[i].replace('{}', str(value))
            return lines
    
    # Examples
    variable_value = 10
    strlist = ['example = {}', 'test_variable = {}']
    # Code in question
    strlist = find_occurrence_in_str_list(strlist, 'test_variable', variable_value)
    

    注意:这将替换字符串中的每个 {}

    【讨论】:

      猜你喜欢
      • 2015-01-27
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 2011-06-14
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多