在for循环中解压列表的列表问题?
问题描述:
我有一个列表,我想解压循环,但我遇到了一个问题。在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
第一个如何工作,但第二个不是?
答
for a,b in set
相当于a,b = set[0] ... loop ... a,b = set[1] ... loop ...
所以Python试图在set
的第一个元素解压到的元组a,b
不工作。
答
主要是因为他们是完全不同的:
在第一循环中,set
是(date(2010, 7, 5), ['item 1', 'item 2'])
,你解压。 a,b
和set
具有相同的长度,所以这个工作。
在第二个你遍历集合(含2个元素的元组,这就是为什么你可以遍历它),并尝试解开的第一个元素:循环的第一次迭代确实tmp = set[0]
这是date(2010, 7, 5)
,然后尝试a,b = tmp
该错误信息失败。
答
我认为你在寻找这样的事情:
>>> for a, b in a_list:
print(a, b)
2010-07-05 ['item 1', 'item 2']
2010-07-06 ['item 1']
此外,请注意,set
是因为它阴影内置变量的坏名声。