擅长:python、mysql、java
<p><code>zip</code>将iterables作为单独的参数接收,而不是在列表中。使用<code>zip(df)</code>时,实际上是将单个iterable传递给zip(<code>[cat, dog]</code>)。比较:</p>
<pre><code>zip(cat, dog) # what you should do
zip([cat, dog]) # what you are doing
</code></pre>
<p>在第一种情况下,<code>cat</code>和<code>dog</code>被认为是独立的可重用项,因此<code>x</code>在每次迭代中都有这些值:</p>
<ol>
<li><code>('aba', 'tul',) # (cat[0], dog[0])</code></li>
<li><code>('vdv', 'baba') # (cat[1], dog[1])</code></li>
</ol>
<p>在第二种情况下<code>[cat, dog]</code>被视为单个iterable,因此<code>x</code>在每次迭代中都有以下值:</p>
<ol>
<li><code>(['aba', 'vdv'],) # [cat, dog][0]</code></li>
<li><code>(['tul', 'baba'],) # [cat, dog][1]</code></li>
</ol>
<p>要将列表中的每一项作为单独的参数传递,必须将列表解包为单独的参数:</p>
<pre><code>cat = ['aba', 'vdv']
dog = ['tul', 'baba']
df = [cat, dog]
for x in zip(*df): # note the asterisk before df
print('\t'.join(x)) # using Python 3, so added parenthesis
</code></pre>
<p>您还可以用以下内容替换循环:</p>
<pre><code>print(*('\t'.join(x) for x in zip(*df)), sep='\n')
</code></pre>