擅长:python、mysql、java
<p>下面是一些有趣的pythonic版本的减号情况:</p>
<pre><code>from heapq import heapify, heappop
def sort_gen(l, StopException=StopIteration):
heapify(l)
for i in xrange(len(l)):
yield heappop(l)
raise StopException
class YStopIteration(StopIteration):
pass
def diff_gen(l1, l2):
xgen = sort_gen(l1)
ygen = sort_gen(l2, YStopIteration)
try:
x = next(xgen)
y = next(ygen)
while True:
if x < y:
yield x
x = next(xgen)
elif x == y:
x = next(xgen)
y = next(ygen)
else:
y = next(ygen)
except YStopIteration:
# 2nd generator exhausted: yield all the rest
yield x
for x in xgen:
yield x
list1=[1,2,1,3,4,4,5,6,2,8]
list2=[3,5,3,8,1,9,9]
dg = diff_gen(list1, list2)
d = list(dg) # [1, 2, 2, 4, 4, 6]
</code></pre>