Python交换开始/结束字符(括号、方括号等)

Python交换开始/结束字符(括号、方括号等),python,python-3.x,string,Python,Python 3.x,String,是否有简单的功能来交换开始/结束(方向)字符,例如(,],>交换方向(“abcd{1>2(3)]) “abcd}12(3]” “abcd}12(3]” “abcd}1>2(3)” 除了将一组str.replace()调用链接在一起,还有更简单的方法吗?MAP1={'}':'{','):'(',']':'[','>':'Tl;dr 根据@jornsharpe和@juanpa.arrivillaga的回复,我想出了以下函数作为最佳答案: open_chars=“([{” 交换方向表=str.mak

是否有简单的功能来交换开始/结束(方向)字符,例如
]
>交换方向(“abcd{1>2(3)])
“abcd}12(3]”
“abcd}12(3]”
“abcd}1>2(3)”
除了将一组
str.replace()
调用链接在一起,还有更简单的方法吗?

MAP1={'}':'{','):'(',']':'[','>':'Tl;dr
根据@jornsharpe和@juanpa.arrivillaga的回复,我想出了以下函数作为最佳答案:

open_chars=“([{”
交换方向表=str.maketrans(打开字符+关闭字符,打开字符+关闭字符)
def至_开口(文本):
对于CHU close,CHU open in zip(close_chars,open_chars):
如果Chu在文本中关闭:
text=text.replace(通道关闭,通道打开)
返回文本
def to_关闭(文本):
对于CHU open,CHU close in zip(打开字符,关闭字符):
如果Chu在文本中打开:
text=text.replace(通道打开,通道关闭)
返回文本
def交换方向(文本):
返回s.translate(交换方向表)
附加测试 为了彻底起见,我做了一些额外的测试。下面是我尝试的函数的完整列表,按技术组织

#sandbox.py
open_chars=“([{”
to_open_table=str.maketrans(close_chars,open_chars)
to_close_table=str.maketrans(打开字符,关闭字符)
交换方向表=str.maketrans(打开字符+关闭字符,关闭字符+打开字符)
def至_开口_tr(文本):
返回文本。翻译(到打开的表格)
def to_closing_tr(文本):
返回text.translate(到\u关闭\u表)
def交换方向(文本):
返回text.translate(交换方向表)
def至_开口_tb(文本):
返回text.translate(str.maketrans(关闭字符,打开字符))
def to_closing_tb(文本):
返回text.translate(str.maketrans(打开字符,关闭字符))
def交换方向(文本):
返回text.translate(str.maketrans(打开字符+关闭字符,关闭字符+打开字符))
def至开口(文本):

返回text.replace(“)”、“(”).replace(“])、“[”.replace(“}”)、“{”).replace(“>”,“Python的文档中有和的列表。另请参见示例。在本例中,您可以使用
str.translate
,但您仍然需要自己创建映射,谢谢@juanpa.arrivillaga和@jornsharpe!在您的两条评论之间,我能够为我在原始问题中提到的每种情况提供一个非常可靠的函数。
to_opening_tr:     500000 loops, best of 5: 622 nsec per loop
to_opening_tb:     500000 loops, best of 5: 784 nsec per loop
to_opening_r:      1000000 loops, best of 5: 293 nsec per loop
to_opening_fr:     500000 loops, best of 5: 600 nsec per loop

to_closing_tr:     500000 loops, best of 5: 622 nsec per loop
to_closing_tb:     500000 loops, best of 5: 800 nsec per loop
to_closing_r:      1000000 loops, best of 5: 328 nsec per loop
to_closing_fr:     500000 loops, best of 5: 582 nsec per loop

swap_direction_tr: 500000 loops, best of 5: 569 nsec per loop
swap_direction_tb: 200000 loops, best of 5: 998 nsec per loop
swap_direction_fr: 500000 loops, best of 5: 937 nsec per loop
$test_str = "'abcd{1>2(3]'"
# $test_str = "'abcd{1>2(3]abcd}1>)))3[[[[abasdh[[[[[[[['" # Alternate string to try

Write-Host "to_opening_tr:     " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_opening_tr($test_str)"

Write-Host "to_opening_tb:     " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_opening_tb($test_str)"

Write-Host "to_opening_r:      " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_opening_r($test_str)"

Write-Host "to_opening_fr:     " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_opening_fr($test_str)"

Write-Host ""

Write-Host "to_closing_tr:     " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_closing_tr($test_str)"

Write-Host "to_closing_tb:     " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_closing_tb($test_str)"

Write-Host "to_closing_r:      " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_closing_r($test_str)"

Write-Host "to_closing_fr:     " -NoNewline
python -m timeit -s "import sandbox" "sandbox.to_closing_fr($test_str)"

Write-Host ""

Write-Host "swap_direction_tr: " -NoNewline
python -m timeit -s "import sandbox" "sandbox.swap_direction_tr($test_str)"

Write-Host "swap_direction_tb: " -NoNewline
python -m timeit -s "import sandbox" "sandbox.swap_direction_tb($test_str)"

Write-Host "swap_direction_fr: " -NoNewline
python -m timeit -s "import sandbox" "sandbox.swap_direction_fr($test_str)"