0

背景:
3D デカルト座標の非常に大きなリストがあります。このリストを処理して、座標を Z 座標 (つまり、その平面内のすべての座標) でグループ化する必要があります。現在、Z 座標ごとにループを使用してリストからグループを手動で作成していますが、考えられる Z 座標が多数ある場合 (以前は 2 ~ 3 平面しか処理していませんでした)、これは非現実的になります。もちろん、同様の要素に基づいてリストをグループ化する方法は知っていますが、Z の n 個の可能な値に対してこのプロセスを自動化する方法を探しています

。質問:
同じ Z のリスト要素をグループ化するプロセスを自動化する最も効率的な方法は何ですか?調整してから、各平面の一意のリストを作成しますか?

コード スニペット:
単純なリスト内包表記を使用して、個々の平面をグループ
newlist=[x for x in coordinates_xyz if insert_possible_Z in x]
化しています。データ セット内のすべての Z 平面に対して新しい一意のリストを自動的に作成する方法を探しています。

データ形式:
((x1,y1,0), (x2, y2, 0), ... (xn, yn, 0), (xn+1,yn+1, 50),(xn+2,yn+2, 50), ... (x2n+1,y2n+1, 100), (x2n+2,y2n+2, 100)...)など
。Z=0、Z=50、Z=100 などのすべての座標を自動的に取得したい。Z の値 (50 の増分) は単なる例であり、実際のデータは任意の値を持つことができることに注意してください。

注:
私のデータは、ファイルからインポートされるか、リスト内の別のモジュールによって生成されます。これは、別のプログラム (私が作成していないプログラム) とのインターフェースに必要です。

4

3 に答える 3

0

だから、これは私が思いついた簡単な解決策です:

groups=[]
groups[:]=[]
No_Planes=#Number of planes
dz=#Z spacing variable here

for i in range(No_Planes):
    newlist=[x for x in coordinates_xyz if i*dz in x]
    groups.append(newlist)

これにより、データ セット内の任意の平面を で簡単に操作できますgroups[i]。間隔を操作することもできます。@msw の itertools に関する応答を読んだ後に気づいたように、これは既存のコードの拡張でもあります。現在のメソッドをループすると、私は顔を見つめていて、想像よりもはるかに単純です。

于 2013-09-26T18:29:05.950 に答える