我想写一个"反映"横跨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的方式来做到这一点?感谢
答案 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。
反之亦然(
。