回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图找到一种简洁的方法,从两个列表中构造组合元组列表。考虑以下列表:</P>
<pre class="lang-py prettyprint-override"><code>x = [1, 2, 3]
y = [0, 3, 4, 5]
</code></pre>
<p>目标是获得如下列表:</p>
<pre class="lang-py prettyprint-override"><code>[(None, 0), (1, None), (2, None), (3, 3), (None, 4), (None, 5)]
</code></pre>
<p>因此,匹配对一起进行,如果一个列表中没有对应的元素,那么它应该由某个元素填充(这里,<code>None</code>)</p>
<p><code>zip</code>和<code>itertools.zip_longest</code>在这里不起作用,而且<code>itertools.product</code>显然返回列表的所有组合,这需要大量的后期筛选才能获得正确的组合</p>
<p>我试过:</p>
<pre class="lang-py prettyprint-override"><code>prods = product(x, y)
matches = [ (i,j) for prods if i==j ]
unmatches = []
for i, j in prods:
if i != j and (i, None) not in unmatches:
unmatches += [ (i, None) ]
elif i != j and (None, j) not in unmatches:
unmatches += [ (None, j) ]
</code></pre>
<p>然而,这返回:</p>
<pre class="lang-py prettyprint-override"><code>matches
# [(3,3)]
unmatches
# [ (1, None), (None, 3), (None, 4), (None, 5), (2, None), (3, None) ]
</code></pre>
<p>因为<code>product</code>如何返回产品(例如,没有<code>(0, j)</code>术语)</p>
<p>有简单的方法吗</p>