-1

以下のpythonスニペットを実行すると何が起こっているのか誰か説明できますか?

import itertools

def prob():
    testlists = itertools.combinations([1,2,3,4,5,6,7,8,9,0],4)
    for itervalue in range(5,50):
        for tlist in testlists:
            print itervalue

私の予想される動作は、5 から 50 までの itervalue のすべての値が複数回 (テストリストのリストごとに 1 回) 画面に出力されることです。たとえば、テストリストを次のように定義すると、このようになります。

testlists = [[1,2,3],[5,2,1],[3,2,9]] 

実際には、最初の itervalue のみが出力に出力されます (5 は何百回も出力されます)。元:

5
5
5
#and so on

ここで正確に何が起こっているのですか?私はPythonと動的言語全般に不慣れです。助けてくれてありがとう。

Python 2.6.6 および 2.7.3 を実行しているコンピューターでこれをテストしました。

4

1 に答える 1

1

問題は、テストリストはリスト/タプルではなくジェネレータであるため、一度しかループできないことです。したがって、内部ループは 1 回だけ実行されます。

コードを次のように変更します。

import itertools

def prob():
    testlists = list(itertools.combinations([1,2,3,4,5,6,7,8,9,0],4))
    for itervalue in range(5,50):
        for tlist in testlists:
            print itervalue
于 2013-04-14T04:53:00.650 に答える