這是一個iterator
。您用list(combos)
耗盡了它。此後它有零個元素,所以沒有comb
留給顯示:
>>> import itertools
>>> combos = itertools.combinations(range(3),2)
>>> combos
<itertools.combinations object at 0x0000000004BB66D8>
>>> list(combos)
[(0, 1), (0, 2), (1, 2)]
>>> combos.next()
Traceback (most recent call last):
File "<input>", line 1, in <module>
StopIteration
>>> len(combos)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: object of type 'itertools.combinations' has no len()
combos
是不列表。這是一個iterator
...一旦你完成所有條款,它會拋出StopIteration
異常,但list comprehension
和for loop
都在StopIteration
上結束,因此它們只運行零次。
你可以,但是,這樣做:
combos = list(itertools.combinations(range(3),2))
,將其轉換爲一個列表,列出了可以無限期運行。
這是一個迭代器。你用'list(combos)'來耗盡它。之後它有零個元素,所以沒有'comb'左邊的顯示。 – TemporalWolf
我只是在打印'list(combos)'來表明它不是空的。 – Peaceful
@TemporalWolf:True !!我很愚蠢! – Peaceful