我有一个列表,我想在for循环中解压缩,但我遇到了一个问题。
>>> a_list = [(date(2010, 7, 5), ['item 1', 'item 2']), (date(2010, 7, 6), ['item 1'])]
>>>
>>> for set in a_list:
... a, b = set
... print a, b
...
2010-07-05 ['item 1', 'item 2']
2010-07-06 ['item 1']
>>>
>>> for set in a_list:
... for a, b in set:
... print a, b
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: 'datetime.date' object is not iterable
第一个如何工作,但第二个不工作?
答案 0 :(得分:2)
主要是因为它们完全不同:
在第一个循环中,set
为(date(2010, 7, 5), ['item 1', 'item 2'])
,您将其解压缩。 a,b
和set
具有相同的长度,因此可行。
在第二个循环集合(一个包含2个元素的元组,这就是你可以循环它的原因)并尝试解包第一个元素:循环的第一次迭代tmp = set[0]
{{1}然后你尝试使用给定的错误消息失败的date(2010, 7, 5)
。
答案 1 :(得分:1)
for a,b in set
相当于a,b = set[0] ... loop ... a,b = set[1] ... loop ...
所以Python试图将set
中的第一个元素解压缩到无效的元组a,b
中。
答案 2 :(得分:1)
我认为你正在寻找这样的东西:
>>> for a, b in a_list:
print(a, b)
2010-07-05 ['item 1', 'item 2']
2010-07-06 ['item 1']
另外,请注意,set
是变量的错误名称,因为它会内置阴影。