私はかなり些細な問題を思いついていますが、私は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
リストは基本的なリストで、非常に単純です;)