簡體   English   中英

使用列表中的索引替換字符串中的每個字符

[英]Replacing each character in a string using an index into a list

假設我有一個字符串如下:

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

我想更換每個? 在列表中該索引處具有相應的值: values 那么首先? 將被替換為values[0] ,第二? 將被替換為values[1]

所以我的最后一個str看起來像:

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

注意:多少? 會有所不同,但始終等於值中的values

您可以更換? {}和呼叫format

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

這不是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

作為列表理解( 列表上的連接要快於生成器組件上的連接 )thx @Ev。 庫奧尼斯

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM