2010-07-05 72 views
1

我有一個列表,我想解壓循環,但我遇到了一個問題。在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 

第一個如何工作,但第二個不是?

回答

1

for a,b in set相當於a,b = set[0] ... loop ... a,b = set[1] ... loop ...

所以Python試圖在set的第一個元素解壓到的元組a,b不工作。

2

主要是因爲他們是完全不同的:

在第一循環中,set(date(2010, 7, 5), ['item 1', 'item 2']),你解壓。 a,bset具有相同的長度,所以這個工作。

在第二個你遍歷集合(含2個元素的元組,這就是爲什麼你可以遍歷它),並嘗試解開的第一個元素:循環的第一次迭代確實tmp = set[0]這是date(2010, 7, 5),然後嘗試a,b = tmp該錯誤信息失敗。

1

我認爲你在尋找這樣的事情:

>>> for a, b in a_list: 
    print(a, b) 


2010-07-05 ['item 1', 'item 2'] 
2010-07-06 ['item 1'] 

此外,請注意,set是因爲它陰影內置變量的壞名聲。