セット番号を追加
答えて
Pythonでは、シーケンスを変更するメソッドがNone
を返すという規則があります。
は考えてみましょう:
:
>>> a_list = [3, 2, 1] >>> print a_list.sort() None >>> a_list [1, 2, 3] >>> a_dict = {} >>> print a_dict.__setitem__('a', 1) None >>> a_dict {'a': 1} >>> a_set = set() >>> print a_set.add(1) None >>> a_set set([1])
がいくつかは、この大会 "Pythonで恐ろしいmisdesign" が、(リストに関して)設計し、この設計上の決定の背後にある歴史よくある質問gives the reasoningを考慮することができますなぜ
list.sort(
)ソートされたリストを返しますか?パフォーマンスの問題が発生した場合は、リストのコピーを並べ替えるだけで無駄になります。したがって、
list.sort()
は、 リストを所定の場所にソートします。その事実を思い出させるために、ソートされたリスト を返しません。この方法では、ソートされたコピーが必要なときに偶発的に のリストを上書きするだけでなく、 を未分類のバージョンに保つ必要があります。Python 2.4では、新しい組み込み関数 -
sorted()
- が追加されました。 この関数は、指定されたイテラブルから新しいリストを作成し、 をソートして返します。
この機能の特有の問題は、言語の誤った設計ではなく、セットを作成するための良い方法の誤解が原因です。 Latitudeware points outとして、Python 2.7以降では、リテラルa = {1}
またはa = set([1])
をSven Marnachのanswerとして使用することができます。
私は、オブジェクトを変更するメソッドの後に感嘆符を置くRubyの規則を好きですが、私はPythonのアプローチを受け入れることができます。比較的単純でそれを行うには
add()
のでNone
返す場所にセットし・修正されています
>>> empty = set()
>>> print(empty.add(1))
None
>>> empty
set([1])
あなたはこれを行う必要があります:あなたはa
に追加1
の結果を代入している
a = set()
a.add(1)
print a
お知らせを、 Pythonで定義されているadd
操作はNone
を返します。これがに割り当てられますあなたのコードの3210。
また、あなたはセットを初期化するためにこれを行うことができます。
a = set([1, 2, 3])
add()
方法は、セットに要素を追加しますが、それは再びセットを返さない - それはNone
を返します。
a = set()
a.add(1)
またはより良い
a = set([1])
が働くだろう。
ありがとうございます。それはPythonのひどい誤ったデザインのようです。どう思いますか? – Randomblue
@Randomblue: 'set.add()'が再びセットを返すと全く混乱していたと思います。それはなぜでしょうか?コンベンションは次のようなものです。オブジェクトが定位置に変更された場合、 'None'を返します。新しいオブジェクトを作成する場合は、新しいオブジェクトを返します。それはちょうどそれがされている方法です。 –
@RandomBlue:あなたのフォローアップの質問に答える答えを作成しました。 –
addメソッドはセットを更新しますが、Noneを返します。
a = set()
a.add(1)
print a
返される値は、set().add(1)
に割り当てられます。この値はNone
です。add()
は値を返しません。その代わりに、リストのインプレースで動作します。あなたがやりたいこと
は、このでした:もちろん
a = set()
a.add(1)
print(a)
、この例では簡単ですが、Pythonはセットリテラルをサポートしていますので、あなたが本当にこれをやってみたかったならば、それは何をする方が良いでしょう。
警告されるがa = {1}
print(a)
中括弧は{}
が空のdict、中括弧ではないがdictsとセットの両方のために使用されるという事実による空集合(辞書は、コロンの使用によって分離されているを示し、(集合を表しますキーと値を区切る)
もう一つの方法は、次のようになります。
a = set()
a = set() | {1}
これはあなたの集合Aと要素として1とセット
プリント(a)の利回り{1間の結合を作成します}とすると、aはaと{1}の両方の要素をすべて持つことになるため、
a = set()| {1} "インプレース"演算子を検討してください:
a = set()
a |= {1}
@CharlesB答えを出す場合は、答えで行う必要があります。セミコロンを使用するのは恐ろしいことです。 Pythonは読み込み可能であることを意図しており、複数の文を1行にまとめることは、読みやすさにとって非常に悪いことです。 –
@GarethLatty:彼は質問にも答えていません。 – user443854