擅长:python、mysql、java
<p>提示:假设每个列表都有相同的元素(但是列表之间的元素不同),即一个列表是完全红色的(比如r),另一个列表是蓝色的(比如b)。在</p>
<p>输出的每个元素包含r+b或它们,其中r为红色。在</p>
<p>似乎其他人已经为你毁了它,即使你没有要求一个解决办法(但他们有一个很好的解释)</p>
<p>我很快写下了代码。在</p>
<pre><code>import itertools
def interleave(lst1, lst2):
r,b = len(lst1), len(lst2)
for s in itertools.combinations(xrange(0,r+b), r):
lst = [0]*(r+b)
tuple_idx,idx1,idx2 = 0,0,0
for i in xrange(0, r+b):
if tuple_idx < r and i == s[tuple_idx]:
lst[i] = lst1[idx1]
idx1 += 1
tuple_idx += 1
else:
lst[i] = lst2[idx2]
idx2 += 1
yield lst
def main():
for s in interleave([1,2,3], ['a','b']):
print s
if __name__ == "__main__":
main()
</code></pre>
<p>基本思想是将输出映射到(r+b)choose r组合。在</p>