1

私はかなり些細な問題を思いついていますが、私はPythonにまったく慣れていないので、しばらく頭を机にぶつけています。(痛い)。それは解決するのがより論理的なことだと思いますが... まず、Cinema 4D 用の Python SDK を使用していると言わなければならないので、次のコードを少し変更する必要がありました。しかし、これが私がやろうとしていたことであり、苦労していたことです:動的に生成されたいくつかのポリゴン選択をグループ化しようとしています(いくつかのルールに基づいて、それほど重要ではありません)。数学的には次のように機能します。これらの選択は島に基づいています (複数のポリゴンが接続されていることを意味します)。次に、それらの選択をグループ化し、作業できるリストに入れる必要があります。どのポリゴンにも独自のインデックスがあるため、これはかなり単純なはずですが、前に言ったように、私はそこでかなり苦労しています。

主な問題は簡単に説明できます。最初のループで存在しないインデックスにアクセスしようとすると、範囲外のインデックス エラーが発生します。最初に妥当性を評価しようとしましたが、うまくいきませんでした。Cinema 4D + Python に精通している方向けに、必要に応じて元のコードの一部を提供します。これまでのところ、とても悪い。これが単純化され、適応されたコードです。

編集:エラーの原因となるチェックは実際には重複のみをチェックする必要があることを忘れていたため、現在選択されている番号はすでに処理されているためスキップされます。これは、計算負荷の高い計算のために必要です。

本当に願っています。誰かが私を正しい方向に向けることができ、このコードはこれまでのところ理にかなっています。:)

def myFunc():

        sel = [0,1,5,12] # changes with every call of "myFunc", for example to [2,8,4,10,9,1], etc. - list alway differs in count of elements, can even be empty, groups are beeing built from these values
        all = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] # the whole set
        groups = [] # list to store indices-lists into
        indices = [] # list to store selected indices
        count = 0 # number of groups
        tmp = [] # temporary list to copy the indices list into before resetting

        for i in range(len(all)): # loop through values
            if i not in groups[count]: # that's the problematic one; this one actually should check whether "i" is already inside of any list inside the group list, error is simply that I'm trying to check a non existent value
                for index, selected in enumerate(sel): # loop through "sel" and return actual indices. "selected" determines, if "index" is selected. boolean.
                    if not selected: continue # pretty much self-explanatory
                    indices.append(index) # push selected indices to the list
                tmp = indices[:] # clone list
                groups.append(tmp) # push the previous generated list to another list to store groups into
                indices = [] # empty/reset indices-list
                count += 1 # increment count
        print groups    # debug
myFunc()

編集:

で埋められる2番目のリストを追加した後、カウンターとして機能するのextendではなく、すべてが期待どおりに機能しました! appendリストは基本的なリストで、非常に単純です;)

4

3 に答える 3

2
groups[count]

これを最初に呼び出したとき、groups は空のリストで、count は 0 です。何もないため、groups のスポット 0 にあるものにアクセスできません!

groups = []を作成してみてください groups = [[]](つまり、空のリストの代わりに、空のリストのみを持つリストのリスト)。

于 2013-11-12T22:50:05.600 に答える
0

次の 11 行目を修正します。

   if i not in groups[count]

に:

   if i not in groups:
于 2013-11-12T22:47:28.557 に答える