>>> carls = [c.source.out_crushes.all().select_related().values_list('target') for c in similar_crushes]
>>> [carlid for carlid in c for c in carls]
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: 'Crush' object is not iterable
>>> for c in carls:
... pass
...
>>> [carlid for carlid in c for c in carls]
[(1,), (1,), (3,), (3,)]
很抱歉这个可怕的问题标题,但我不知道如何更好地说出来,因为我完全迷失了。
这里发生了什么?为什么它在初始列表理解中不可迭代,但是当我分别迭代它的一部分时,它会变成可迭代的?
答案 0 :(得分:4)
carls
看起来应该是列表列表,例如[[(1,), (2,), (3,)], [(1,), (2,)]]
执行[carlid for carlid in c for c in carls]
时,您尝试迭代最后定义的c
值Crush
similar_crushes
来自for c in carls:
。
当您执行c
时,您将carls
重新定义为PK
列表中的最后一个元素,该列表是for i in range(100):
pass
print i
# out : 99
元组的列表,可以迭代。
{{1}}