2

重複の可能性:
pythonはリストを取得し、setを使用して負の値も存在する場合にのみ返します

別の宿題の問題があります。

セットを使用して、引数としてリストaを取り、要素xのみを含むリストを返すnegated(a)メソッドを記述して、-xもaに含まれるようにします。

彼の例は、入力が

[-6、8、7、3、2、-9、1、-3、2、-4、4、-8、7、8、2、-2、-7、0、1、-9、- 3、-7、-3、-5、6、-3、6、-3、-10、-8]

出力は

[-6、8、7、3、2、-3、2、-4、4、-8、7、8、2、-2、-7、0、-3、-7、-3、6 -3、6、-3、-8]

セットを使わずにそれを行う方法を理解することができました

return [x for x in a if -x in a]

問題にセットを実装するのに問題があります。誰かが私に取るべきステップ、私が問題に取り組むべき方法を教えてもらえますか...私は完全な仕事を探していませんが、あなたがそれをどのように行うかを見るのもいいでしょう。

4

2 に答える 2

2

コードはセットの場合と同じように機能します。リストをセットに変更するだけです。

def negate(a) :
  return [x for x in a if -x in a]

a = set()
a.add(1)
a.add(2)
a.add(-1)
print negate(a)

デモ

于 2012-10-15T01:43:05.970 に答える
1

実装する必要のあるアルゴリズムは次のとおりです。

  1. リスト内のすべての要素を反復処理します
  2. 個々の要素を検討するときは、その否定がリストに存在するかどうかを確認してください
  3. 否定がリストに存在する場合は、それを保持します
  4. 否定がリストに存在しない場合は、それを保持しないでください。

通常、リストを反復処理するときにリストから要素を削除することはお勧めできません。そのため、新しい空のリストを作成し、リストに追加する(または追加しない)ことをお勧めします。

def filterNegs(L):
    answer = []
    for i in L:
        if -1*i in L:
            answer.append(i)
    return answer

同じもののリスト内包は次のとおりです。

return [i for i in a if -1*i in a]

ただし、これを行うとパフォーマンスの問題が発生します。要素がリストにあるかどうかのチェックは、O(n)演算であり、O(1)はセットにあります。したがって、L最初にセットに変換することをお勧めします。

def filterNegs(L):
    L = set(L)
    answer = []
    for i in L:
        if -1*i in L:
            answer.append(i)
    return answer

同じもののリスト内包は次のとおりです。

L = set(L)
return [i for i in a if -1*i in a]

お役に立てれば

于 2012-10-15T01:42:15.200 に答える