4
>>> import itertools
>>> n = [1,2,3,4]
>>> combObj = itertools.combinations(n,3)
>>>
>>> combObj
<itertools.combinations object at 0x00000000028C91D8>
>>>
>>> list(combObj)
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
>>>
>>> for i in list(combObj): #This prints nothing
...     print(i)
...
  1. combObj を反復処理するにはどうすればよいですか?

  2. どうすれば変換できます
    [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

    [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]

4

3 に答える 3

7

オブジェクトを 1 回反復itertools.combinations処理すると、それは使い果たされ、2 回目の反復処理はできなくなります。

再利用する必要がある場合は、以前と同じようにlistorにするのが適切な方法ですtuple。名前を付けて (変数に割り当てて) 固定するだけです。

combList = list(combObject) # Don't iterate over it before you do this!

一度だけ反復したい場合は、まったく呼び出しませんlist

for i in combObj: # Don't call `list` on it before you do this!
    print(i)

補足: オブジェクト インスタンス/通常の変数に名前を付ける標準的な方法は、.comb_objではなくcombObj. 詳細については、 PEP-8を参照してください。

tuple内側の s をsに変換するにはlist、リスト内包表記とlist()組み込みを使用します。

comb_list = [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
comb_list = [list(item) for item in comb_list]
于 2011-10-17T00:08:24.017 に答える
0

ジェネレータはメモリをあまり使用しないので優れています。頻繁に使用していてメモリがある場合は、ジェネレータではなくタプルとして保存してください。

それ以外の場合は、使用するたびにジェネレーターを返す関数を作成することがよくあります。

>>> def get_combObj():
...     return itertools.combinations(n,3)
...
>>> for i in get_combObj():
...     print list(i)
...
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]

(get_combObj()は好きなだけ呼び出すことができます)

于 2011-10-17T03:47:05.107 に答える
0

リストのリストに変換するには、次のようにします。

[list(item) for item in combObj]
于 2011-10-17T00:14:08.777 に答える