擅长:python、mysql、java
<p>我认为这是半整洁的。它又短又简单。
(虽然效率不高)</p>
<pre><code>tokens = ['A', '&', 'B', '|', 'C', '|', '!', 'D', '^', 'E', '&', 'F']
# operators and number of operands they bind (one to the right, rest to the left):
ops = [ ('!',1), ('&',2), ('^',2), ('|',2) ]
def rindex(lst, x):
return len(lst) - 1 - lst[::-1].index(x)
for op, n in ops:
while True:
try:
i = rindex(tokens, op)
except ValueError:
break
# "wrap" it:
tokens[i-n+1 : i+2] = [ tokens[i-n+1 : i+2] ]
tokens
=> [[[['A', '&', 'B'], '|', 'C'], '|', [['!', 'D'], '^', ['E', '&', 'F']]]]
</code></pre>
<p>编辑:使用<code>rindex</code>,由@coproc提供。你知道吗</p>