假设我有一个如下字符串:
mystr = "MY VALUES ARE: (?, ?, ?, ?)"
values = ['a', 'b', 'f', 12]
我想用列表?
中该索引处的相应值替换每个values
。因此,第一个?
将被替换为values[0]
,第二个?
将被替换为values[1]
所以我的最后一个str看起来像:
MY VALUES ARE: ('a', 'b', 'f', '12')
注意:
中的值?
的数量会有所不同,但始终等于该数量values
答案 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] )