def negated(a):
a = set(a)
for i in a:
a.add(-i)
return list(a)
もしa = [ 3, 4, 5, 6, 7, 8, -3, -4]
。否定された対応する値を持つ値のみを出力したい例:3, -3, 4, -4
コードの何が問題なのかわかりません。
def negated(a):
a = set(a)
for i in a:
a.add(-i)
return list(a)
もしa = [ 3, 4, 5, 6, 7, 8, -3, -4]
。否定された対応する値を持つ値のみを出力したい例:3, -3, 4, -4
コードの何が問題なのかわかりません。
>>> s = set(a)
>>> [item for item in a if -item in s]
[3, 4, -3, -4]
あなたのコードでは、元のリストをセットに再割り当てしました。別の変数に割り当てたほうがよいでしょう。
def negated(a):
s = set(a)
for item in a:
if -item not in s:
s.remove(item)
return list(s)
...
>>> negated(a)
[3, 4, -4, -3]
あなたは近くにいます。
ただし、セットに否定を追加する代わりに、否定がセットに含まれていない否定を削除する必要があります。このような:
def negated(a):
a = set(a)
return [i for i in a if -i in a]
トリッキーになりたい場合:
def negated(a):
return set(a) & {-i for i in a}
これは、a のセットと a の否定のセットを作成し、共通部分を返します。( の方が少し速いかもしれませんが{-i for i in a}.intersection(a)
、こちらの方が読みやすいと思います。)