2012-01-22 54 views
3
>>> 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,)] 

對不起,問題的標題,但我不知道如何更好地措詞,因爲我完全失去了。對象是不可迭代的,但變得迭代

這是怎麼回事嗎?爲什麼在初始列表理解中不能迭代,但是當我單獨迭代其中的一部分時,它就變得可迭代了?

回答

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