2016-09-09 11 views
0

2D空間内にポイントのリストがあるとします。私は対称点を見つけようとしています。繰り返し中に次のリスト要素を変更しますか?

これを行うために、私はポイントリストを繰り返し、対称操作を適用します。したがって、これらの操作の1つを最初のポイントに適用し、この操作の後、リストの他のポイントと等しいとします。これらの2点は対称的です。

私が望むのは、リストからこの他のポイントを消去して、このように反復しているので、反復変数の "i"はこの値をとらないということです。私はすでにそれが最初の点と対称であることを知っているからです。

私は似たような投稿を見ましたが、すでに取っているリストの値を削除します。私が望むのは、後続の値を削除することです。

+0

あなたは反復するたびに、見つかったポイントを維持し、別のリストを持っていて、「もし存在しない」かどうかをチェックすることができます。 – garg10may

+0

あなたは今までに何を投稿してください? – garg10may

答えて

1

一般に、反復処理中のリストから値を削除することは好ましくありません。ただし、対称点をスキップする別の方法があります。あなたが前に対称1を見ている場合たとえば、あなたは、各ポイントを確認することができます:ここで

for i, point in enumerate(points): 
    if symmetric(point) not in points[:i]: 
     # Do whatever you want to do 

symmetricは、あなたの対称操作に応じてポイントを生成します。あなたの対称操作は2つの点があなたが対称の点が真のセットがユニークな要素を維持するので、セットに追加して調べることが判明するものは何でも

for i, point in enumerate(points): 
    for sympoint in symmetric(point): 
     if sympoint in points[:i]: 
      break 
    else: 
     # Do whatever you want to do 
+0

これは線形の複雑さを持っています。 – garg10may

+0

@ garg10may私はそれが二次的だと思うけど、もっと速い方法があるのか​​分からない。最悪の場合は、対称点がない場合です。したがって、すべての点について、リスト全体をテストする必要があります。すべての点が対称であり、私の解は線形です。 –

1

を行うことができますことをより多くのを接続している場合は、point not in setかの条件を使用することができO(1)です。

if point not in s: 
    #test for symmetry 
    if symmetric: 
     s.add(point) 
関連する問題