Python最好的方式来翻转'一串括号

时间:2018-01-05 00:00:26

标签: python

我想写一个"反映"横跨y轴的一串括号。例如,)()))将成为s = '((()(' par = '(', ')' result = ''.join([par[1 - par.index(p)] for p in s[::-1]]) 。我知道可以这样做:

$(document).ready(function(){
  $("#collapse1").on("hide.bs.collapse", function(){
    $("#icon").html('<span class="glyphicon glyphicon-plus"></span>');
  });
  $("#collapse1").on("show.bs.collapse", function(){
    $("#icon").html('<span class="glyphicon glyphicon-minus"></span>');
  });
});

是否有更简洁/更pythonic的方式来做到这一点?感谢

5 个答案:

答案 0 :(得分:2)

''.join({'(':')', ')':'('}[c] for c in s[::-1])

答案 1 :(得分:1)

我将切片与str.translate()

结合起来
In [16]: s = '((()('

In [17]: tr = str.maketrans('()', ')(')

In [18]: s[::-1].translate(tr)
Out[18]: ')()))'

答案 2 :(得分:1)

你可以试试这个:

d = {'(':')', ')':'('}
s = '((()('
new_d = ''.join(d[i] for i in s[::-1])

输出:

')()))'

编辑:没有字典:

new_s = ''.join(chr(ord(i)-1) if ord(i)%40 else chr(ord(i)+1) for i in s[::-1])

输出:

')()))'

答案 3 :(得分:0)

p = {'(': ')', ')': '('}
s = '((()('
s = ''.join(p[e] for e in s[::-1])

答案 4 :(得分:0)

ref = lambda s:''.join( chr(ord(e)^1) for e in s[::-1])
print(ref('((()('))     # )()))

基本上,我们的想法是将)转换为(,方法是翻转其ascii值的最后一位。

)的ascii是41

41 ^ 1 - &gt; 40 - &gt; (的ascii。

反之亦然(