2

次のようなデータのリストが 1 つあります。

from shapely.geometry import box

data = [box(1,2,3,4), box(4,5,6,7), box(1,2,3,4)]
sublists = [A,B,C]

リスト「データ」には次のサブリストがあります。

A = box(1,2,3,4)
B = box(4,5,6,7)
C = box(1,2,3,4)

サブリストが交差するかどうかを確認する必要があります。交差する場合は、1 つのタプルに入れる必要があります。交差しない場合は、別のタプルに入れる必要があります。期待される結果は次のとおりです。

result = [(A,C), (B)]

どうやってするの?

私はそれを試しました:

results = []
for p,c in zip(data,sub_lists):
    for x in data:
        if p.intersects(x): ##.intersects return true if they overlap else false
            results.append(c)
print results
4

1 に答える 1

1

ダウンロードせずshapelyに、リストでやりたいことは文字列(または整数)で複製できると思います:

In [221]: data=['one','two','three']    
In [222]: data1=['one','four','two']

In [223]: results=[[],[]]
In [224]: for i in data1:
    if i in data:
        results[0].append(i)
    else:
        results[1].append(i)
   .....:         

In [225]: results
Out[225]: [['one', 'two'], ['four']]

をテストに置き換えi in dataます。intersectsの最初のサブリストには、テストが真であるresults要素が含まれています。data12 番目のサブリストには、false である要素が含まれています。

あなたの質問は少し混乱してdataおりsublists、同じ要素が含まれているようです。したがって、 が入っている (または の要素と交差している) かどうかをテストAdatadataいるのではなく、 がAの他の要素と交差しているかどうかなどをテストしている可能性があります[A,B,C]

いずれにせよ、結果を収集するための鍵は、テストに応じて results配置できる2 つ (またはそれ以上) のスロットを に配置することです。ディクショナリの場合もあれば、2 つの異なる変数の場合もあります。例えば。iresultsresults={'found':[],'lost':[]}

テストにもっと取り組む必要がありますか?

A 'intersects with' any of [B,C]
B 'intersects with' any of [A,C]
C 'intersects with' any of [A,B]
于 2015-06-15T00:50:19.590 に答える