自从我的课本教程介绍列表和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循环时在文档中将其描述为“列表理解”,这很有趣,因为我没有理解它。
如果任何人都可以在最高级别上更清楚地表明这一点,那就太好了。
答案 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
的原因。