gpt4 book ai didi

python - 在 for 循环中解包一个元组

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:03 25 4
gpt4 key购买 nike

我在解包元组时遇到了一些问题。具体来说,我不知道为什么这不起作用:

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

在我看来,上面的代码应该将元组 p 中的两个列表解压缩为 ik,但这显然不是发生了什么,我不确定为什么。

所以,我想我有两个问题:

  1. 如果 for i,k in p 不解压元组中的列表,它实际上做了什么
  2. 如何轻松地从 for 循环中的元组中解压列表?

预期的结果是:

[0,1,2,3]
[4,5,6,7]

我正在使用 python 2.7.9,如果这恰好是特定于版本的话。

最佳答案

如果你一步一步...

首先,执行 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])

然后,当您执行 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

这会失败,因为您基本上要尝试做的是 i, k = [0, 1, 2, 3],并且列表中的元素更多,然后有变量.

您可能想要使用 zip相反,函数将两个列表中的数字配对。

例如:

>>> p = zip(a, b)
>>> print p
[(0, 4), (1, 5), (2, 6), (3, 7)]

这样,当我们运行您的循环时,第一个元组中的元素数量与您的循环中的变量数量相匹配,因此 Python 不会抛出错误。这意味着您的输出将是:

0 4
1 5
2 6
3 7

如果这不是您想要的输出,您需要重新考虑代码的结构。


编辑:

根据您的更新,如果您只希望输出为:

[0, 1, 2, 3]
[4, 5, 6, 7]

...那么您实际上根本不需要使用解包。下面的循环会工作得很好:

for i in p:
print i

i 将在第一次迭代中分配给 p 中的第一项,然后在循环重复时分配给第二项。

关于python - 在 for 循环中解包一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31881759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com