回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>这是我的出发点。这是正常的。你知道吗</p>
<pre><code>l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
l3 = [9, 10, 11, 12]
def interleave(iterable1, iterable2):
for item1, item2 in zip(iterable1, iterable2):
yield item1
yield item2
print(interleave(l1, l2))
print('-' * 30)
print(list(interleave(l1, l2)))
</code></pre>
<p>如果我想扩展它以使用所有三个列表,我可以这样做:</p>
<pre><code>l1 = [1, 2, 3, 4]
l2 = [5, 6, 7, 8]
l3 = [9, 10, 11, 12]
def interleave(*args):
for item1, item2, item3 in zip(*args):
yield item1
yield item2
yield item3
print(interleave(l1, l2, l3))
print('-' * 30)
print(list(interleave(l1, l2, l3)))
</code></pre>
<p>但是,我“解决”了使用
*args,但我的项目分配仍然是手动的。你知道吗</p>
<p>我想说:</p>
<pre><code>def interleave(*args):
for *items in zip(*args):
yield items
</code></pre>
<p>允许我将任意数量的输入变量解包到*项中,但出现以下错误:
<code>SyntaxError: starred assignment target must be in a list or tuple</code></p>
<p>我不想说<code>*items = <something></code>。我想让*项接收任意数量的输入变量。你知道吗</p>
<p>如果我有六个列表,我不想说item1,item2,…,item6,后跟相同数量的收益。你知道吗</p>
<p>这真的不是很好扩展。你知道吗</p>
<p>有什么办法可以做我想做的事吗?你知道吗</p>