这段代码是怎么回事?

2024-05-17 07:16:13 发布

您现在位置:Python中文网/ 问答频道 /正文

x,y,z = [1,2,3], [4,5,6], [7,8,9]
for a,b,c in x,y,z:
    print(a,b,c)

输出为:

^{pr2}$

我无法从精神上理解产生这个输出的逻辑。我知道zip函数可以使代码按照我明确的意图运行;但我只是想理解,当您不使用zip函数时,它为什么会这样工作。在

这是一个经过深思熟虑的功能,一个特性,你可以用这种方式连续迭代多个列表吗?某种程度上?在


Tags: 函数代码in功能精神列表for方式
3条回答

天哪,这真是一团糟。这只是使用了太多python的iterable unpacking。语句a, b, c = iterable只是将iterable的元素赋给变量ab和{}。在这种情况下,iterable必须有3个元素。在

首先你有:

x,y,z = [1,2,3], [4,5,6], [7,8,9]
# Which is:
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

然后你有:

^{pr2}$

还有一件事需要注意,语句mytuple = 1, 2, 3mytuple = (1, 2, 3)是相同的。在

它的代码非常直截了当。在

  1. 这将三个列表分配给xy、和{}。在

    x,y,z = [1,2,3], [4,5,6], [7,8,9]
    
  2. 这将创建一个(x,y,z)的元组,并将迭代每个元素。在

    ^{pr2}$

    但是,a,b,c意味着iterable应该有3个对象

  3. 然后,打印ab和{}。在

        print(a,b,c)
    

如果您想知道发生了什么,我建议您更改y中的一个元素:

x,y,z = [1,2,3], [3,4,5,6], [7,8,9]
for a,b,c in x,y,z:
    print(a,b,c)

1 2 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

或者,从x中删除一个:

x,y,z = [1,2], [4,5,6], [7,8,9]
for a,b,c in x,y,z:
    print(a,b,c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack

你已经有了很好的答案,但我认为考虑到这种等效的变化将有助于使问题更清楚:

x,y,z = [1,2,3], [4,5,6], [7,8,9]
for t in x,y,z:
    a, b, c = t
    print(a,b,c)

你不会惊讶于t连续绑定到xy和{},对吧?在原始代码中也发生了完全相同的情况,只是:

^{pr2}$

部分没有那么明显。在

相关问题 更多 >