2017-08-16 12 views
0

人!Python:list(フィルタオブジェクト)はオブジェクトを空にします

私は、Python 3.6.1を使用して、面白い問題になっています:
私は、itemsリストからサブリストを取得するには、単純なitertools.filter()を使用していますし、私は2回だけそれを印刷します。

items = [1,2,3,4,5] 
operateVersions = filter(lambda t: t, items) 
print ("1: %s" % list(operateVersions)) 
print ("2: %s" % list(operateVersions)) 

結果は奇妙です:そう

1: [1, 2, 3, 4, 5] 
2: [] 

、私はlist(operateVersions)を実行すると、それは何らかの形だけではなく、リストの解釈
を返すのoperateVersionsフィルタオブジェクトを書き換え、それはOK振る舞いですか?それは私を探していません

+1

あなたは 'itertools.filter'を使用していますか?私が知っている限り、python3.xには存在しません(少なくとも、私のマシンにインストールされているpython3.5には存在しません)。 – mgilson

+0

非常に関連しています:https://stackoverflow.com/q/12319025/748858 - 具体的には、イテレータを複数回反復する場合は、リストをイテレータではなく 'operateVersions'に格納する必要があります。 – mgilson

+0

@mgilsonまたはこの場合、毎回 'items'にフィルタを直接適用してください... –

答えて

0

フィルタは特別な繰り返し可能なオブジェクトであり、ジェネレータのように一度しか反復処理ができません。したがって、本質的に、それは2回目の実行時に空のリストを返します。

関連する問題