问题解压缩for循环中的列表列表?

时间:2010-07-05 14:10:41

标签: python

我有一个列表,我想在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

第一个如何工作,但第二个不工作?

3 个答案:

答案 0 :(得分:2)

主要是因为它们完全不同:

在第一个循环中,set(date(2010, 7, 5), ['item 1', 'item 2']),您将其解压缩。 a,bset具有相同的长度,因此可行。

在第二个循环集合(一个包含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是变量的错误名称,因为它会内置阴影。

相关问题