2017-03-08 3 views
0

考える二つのリスト:Pythonで2つのリストの和集合を得るこれら2つの方法の違いは何ですか? Pythonで

>>> a = [1,2,3,4,5,6,'b','e'] 
>>> b = [1,2,3,4,5,'a','b','c','d',] 

二つのリストの和集合を取得するこれらの2つの方法の違いは何ですか?

>>> set(a).union(set(b)) 
set(['a', 1, 2, 3, 4, 5, 6, 'c', 'b', 'e', 'd']) 
>>> set(a+b) 
set(['a', 1, 2, 3, 4, 5, 6, 'c', 'b', 'e', 'd']) 

論理的な違い(これらの2つの方法が同じ結果をもたらさない場合)はありますか?パフォーマンスの影響はありますか?

+2

この質問に不明な点がある場合は、フラグを撤回してください。それはかなり明確ですIMO –

答えて

2

実装の詳細が異なっている:

方法A:

  1. リストa
  2. の要素からセットを作成するリストb
  3. の要素からセットを作成します
  4. は、1と2のセットでset.unionを使用してマージします。

手順2.はここでは無駄です。 set(a).union(b)も同様に機能します。

方法B:

  1. は、リストaの要素から新しいリストを作成し、リストb
  2. は1
  3. あり

で作成されたリストからセットを作成します結果に差はありません。同じことをするためにちょうど異なる方法。メソッドBはより速く、使用される中間コレクションが少ないためです。

+0

大きな入力の場合、 'set(a).union(b)'が最速になると思いますが(私はそれをバックアップするものは何もありません、atm :) :) – miradulo

+0

あなたのコメントへの回答@ミッチhttp://stackoverflow.com/questions/4674208/is-it-faster-to-union-sets-or-check-the-whole-list-for-a-duplicate –

+0

注文アイテム'set'(反復または印刷時)に定義されていて実装に依存しています。等価集合を構築する2つの異なる方法が、異なる反復順序をもたらす可能性があります。それは任意の合理的なコード(任意の反復順序を扱う)には関係ありませんが、問題の2つのアプローチの結果の間に*小さな*差があります。 – Blckknght

関連する問題