在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,bset具有相同的长度,所以这个工作。

在第二个你遍历集合(含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是因为它阴影内置变量的坏名声。