我有一個字串,例如s = "-1 2-3"我想替換 all -to 和 all to -。
我所期望的是s = 1-2 3。所以我不能只使用s.replace('-',' ').replace(' ','-'),因為它回傳s=-1-2-3,也許 for 回圈可以提供幫助。但我想知道是否有一種pythonic方式可以做到這一點?
感謝所有解決方案我對以下所有功能進行了簡單測驗
def a(s="-1 2-3"):
s = re.sub('[ -]', lambda match: '-' if match[0] == ' ' else ' ', s)
return s
def b(s="-1 2-3"):
PLUS = ' '
MINUS = '-'
swap = {ord(PLUS): ord(MINUS), ord(MINUS): ord(PLUS)}
s = s.translate(swap)
return s
def c(s="-1 2-3"):
replacements = {" ": "-", "-": " "}
return ''.join([replacements[i] if i in replacements.keys() else i for i in s])
def d(s="-1 2-3"):
return s.replace(' ', '\x01').replace('-', ' ').replace('\x01', '-')
if __name__ == '__main__':
a = timeit.timeit(a, number=100000) # a=0.20307550000000002
b = timeit.timeit(b, number=100000) # b=0.08596850000000006
c = timeit.timeit(c, number=100000) # c=0.12203799999999998
d = timeit.timeit(d, number=100000) # d=0.033226100000000036
print(f"{a=}\n{b=}\n{c=}\n{d=}\n")
uj5u.com熱心網友回復:
您可以使用翻譯(沒有ordBarmar 指出的):
s = "-1 2-3"
s.translate(str.maketrans('- ', ' -'))
輸出:
' 1-2 3'
uj5u.com熱心網友回復:
您可以使用字典和回圈,因此您的字典中可以有任意數量的替換。
s = "-1 2-3"
replacements = {" ":"-", "-":" "}
s = ''.join([replacements[i] if i in replacements.keys() else i for i in s])
' 1-2 3'
uj5u.com熱心網友回復:
你應該試試:
s=s.replace(' ','\x01').replace('-',' ').replace('\x01','-')
它將所有“ ”替換為未使用的字符,然后將“-”替換為“ ”,然后將“未使用的字符”替換為“-”,有效地交換“ ”和“-”。
uj5u.com熱心網友回復:
您可以使用re.sub().
import re
s = "-1 2-3"
s = re.sub('[ -]', lambda match: '-' if match[0] == ' ' else ' ', s)
uj5u.com熱心網友回復:
許多人已經回答了你,所以我添加了這個例子來使用map()函式的完整性:
def replaceSymbol(s):
res = s;
if ' ' in s:
res = '-'
elif '-' in s:
res = ' '
return res
''.join(map(replaceSymbol, "-1 2-3"))
輸出:
1-2 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448789.html
上一篇:提取字串向量的唯一元素
下一篇:C將特定的檔案輸入拆分為變數
