使用列表中的索引替换字符串中的每个字符

时间:2019-06-05 14:36:39

标签: python string

假设我有一个如下字符串:

mystr = "MY VALUES ARE: (?, ?, ?, ?)"
values = ['a', 'b', 'f', 12]

我想用列表?中该索引处的相应值替换每个values。因此,第一个?将被替换为values[0],第二个?将被替换为values[1]

所以我的最后一个str看起来像:

MY VALUES ARE: ('a', 'b', 'f', '12')
  

注意:?的数量会有所不同,但始终等于该数量   values

中的值

2 个答案:

答案 0 :(得分:4)

您可以将?替换为{}并致电format

print(mystr.replace("?", "'{}'").format(*values))
#MY VALUES ARE: ('a', 'b', 'f', '12')

答案 1 :(得分:2)

  

这不是sql,看起来像它。不必担心SQL注入,这里不必担心。

有关参数化查询,请参见https://bobby-tables.com/python-仅用于替换使用 str.replace(old, new, count=1)

sql = "My VALUES are (?, ?, ?, ?)"
values = ['a', 'b', 'f', 12]

for v in values:
    sql = sql.replace("?",f"'{v}'",1)  # inefficient - will create intermediate strings to
                                       # be replaced

print(sql)

输出:

我的值是('a','b','f','12')


性能略高,但代码也更多:

sql = "My VALUES are (?, ?, ?, ?)"
values = ['a', 'b', 'f', 12]

k = iter(values)

# see list comp below for shorter approach
l = []  
for c in sql:
    if c != '?':
        l.append(c)
    else:
        l.append(f"'{next(k)}'")

sql = "".join(l)
print(sql)         # My VALUES are ('a', 'b', 'f', '12') as well

列表理解(join is faster on list then on generator comps)乘@Ev. Kuonis

sql = "".join( [ c if c != '?' else f"'{next(k)}'" for c in sql] )