<p>我想我可能有办法解决这个听起来可疑的问题。不得不求助于<code>deque</code>。你知道吗</p>
<pre><code>from collections import deque
from itertools import repeat, izip, izip_longest
A_list = [1, 2, 3]
B_list = [4]
C_list = [5, 6, 7, 8]
D_list = [9, 10]
def popper(x, reserve=None):
for y in x:
while y:
yield y.popleft()
while reserve:
yield reserve.popleft()
def generate_couples(A, B, C, D):
A = deque(izip(A, repeat(1)))
B = deque(izip(B, repeat(2)))
C = deque(izip(C, repeat(3)))
D = deque(izip(D, repeat(4)))
reserve = deque()
a, b = popper([A, B, C, D],reserve=reserve), popper([B, C, D])
for (x, y) in izip_longest(a, b):
if not y:
yield [x[0], None]
continue
while x[1] == y[1]:
reserve.append(y)
y = next(b)
yield [x[0], y[0]]
print list(generate_couples(A_list, B_list, C_list, D_list))
[[1, 4], [2, 5], [3, 6], [7, 9], [8, 10]]
A_list = [1, 2, 3]
B_list = [4]
C_list = [5, 6, 7, 8, 9, 10]
D_list = [11]
print list(generate_couples(A_list, B_list, C_list, D_list))
[[1, 4], [2, 5], [3, 6], [7, 11], [8, None], [9, None], [10, None]]
</code></pre>