for循环中给定的多个变量和列表如何解释?

时间:2019-06-11 15:44:55

标签: python python-3.x for-loop

自从我的课本教程介绍列表和for循环以来,我发现for循环比解释的类型复杂得多:

for i in list:

通常我会看到类似的东西

for j, k in l, ll:

而这只是我所看到的循环的多种语法之一。

让我们使用此示例演示如何尝试在shell中向自己解释如何读取这些多变量/多循环列表。

>>> l
['one', 'two']
>>> ll
['b', 'a']

有了这些值,我可以做到:

>>> for j, k in l, ll:
...     print(j, k)
...     print("increment")
... 
one two
increment
b a
increment

好的,所以我尝试了l.append("three")并在shell中运行了相同的行。结果是这样:

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

我想用英语理解如何在for循环中为vars / lists赋予多个值而又不理解的情况下如何读取语法。


我从阅读其他问题中得出的结论是,可迭代的j, k是一个元组,现在考虑到它就变得有意义了。但是我仍然不知道当有多个列表时发生了什么,可能也理解为两个列表的元组。

我相信我在努力理解for循环时在文档中将其描述为“列表理解”,这很有趣,因为我没有理解它。

如果任何人都可以在最高级别上更清楚地表明这一点,那就太好了。

2 个答案:

答案 0 :(得分:0)

读取此语句的方式:

for j, k in l, ll:
    print(j, k)

l,ll视为一个包含两个列表的元组,每个列表预期正好具有两个元素(将解压缩为循环变量j和k)。

这与写作相同:

for j, k in (l, ll):
    print(j, k)

for循环的j, k部分“解包”每个列表的内容,因此这些列表必须恰好具有两个元素。

迭代次数与提供的列表数相对应。您可以添加第三个列表,但它还需要包含两个元素。您无法将元素添加到这些列表中,因为它们不适合for循环的j,k分配

lll = ['x','y']
for j,k in l, ll, lll:
    print(j,k)

# one two
# b a
# x y

答案 1 :(得分:0)

当您写for i in a, b:时,它与for i in (a, b):相同

让我们仔细看看。假设您有以下代码:

array = [(1, 2), (3, 4), (5, 6)]
for i in array:
    print(i)

很容易理解这段代码的输出是这样的:

(1, 2)
(3, 4)
(5, 6)

您反复抛出一个元组列表。现在,在Python中,有一种语法可以在不同的变量中获取元组的值,如下所示:

i, j = (1, 2)

相同
i, j = 1, 2

所以您也可以这样编写循环:

for i, j in a, b:
    print(i, j)

并获得相同的输出:

1 2
3 4
5 6

但是现在想象一下,您可以像这样更改数组

array = [(1, 2), (3, 4), (5, 6, 7)]

当您要求他从i获得j(5, 6, 7)时,Python将无法弄清您的意思,这就是ValueError的原因。