我在拆开元组时遇到了一些麻烦.具体来说,我不知道为什么这不起作用:
a = [0,1,2,3]
b = [4,5,6,7]
p = a,b
for i,k in p:
print i,k
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-422-2ba96d641daa> in <module>()
----> 1 for i,k in p:
2 print i,k
3
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
在我看来,像上面的代码应该解开元组中的两个列表p进入i和k,但是这显然不是发生了什么,我不知道为什么.
所以,我想我有两个问题:
for i,k in p真正做的,如果它不存在于元组解包列表预期的结果是:
[0,1,2,3]
[4,5,6,7]
Run Code Online (Sandbox Code Playgroud)
我正在使用python 2.7.9,如果这恰好是特定于版本的.
Mic*_*x2a 14
如果你一步一步走......
首先,做p = a, b会让你得到一个由2个元素组成的元组 - 你的列表:
>>> a = [0, 1, 2, 3]
>>> b = [4, 5, 6, 7]
>>> p = a, b
>>> print p
([0,1,2,3], [4, 5, 6, 7])
Run Code Online (Sandbox Code Playgroud)
然后,当你这样做时for i, k in p,Python将尝试获取内部的第一个项目,p然后将其解压缩到i,k.那么,你的循环的第一次迭代基本上是做与此相同的事情:
>>> temp = p[0]
>>> print temp
[0, 1, 2, 3]
>>> i, j = temp
Traceback (most recent call last):
File "<stdin>", line 1 in <module>
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
这将失败,因为你基本上要做的是i, k = [0, 1, 2, 3],并且列表中有更多元素,那么有变量.
您可能希望使用zip函数,它将两个列表中的数字配对.
例如:
>>> p = zip(a, b)
>>> print p
[(0, 4), (1, 5), (2, 6), (3, 7)]
Run Code Online (Sandbox Code Playgroud)
这样,当我们运行你的循环时,第一个元组内的元素数量与循环中的变量数量相匹配,因此Python不会抛出错误.这意味着你的输出将是:
0 4
1 5
2 6
3 7
Run Code Online (Sandbox Code Playgroud)
如果这不是您想要的输出,则需要重新考虑代码的结构.
编辑:
根据您的更新,如果您只想要输出:
[0, 1, 2, 3]
[4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
...然后你根本不需要使用拆包.以下循环可以正常工作:
for i in p:
print i
Run Code Online (Sandbox Code Playgroud)
i将p在第一次迭代中分配给第一个项目,然后在循环重复时分配给第二个项目.
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |