2011-01-12 3 views
12

私はユニークなアイテムの2つの別々のリストから1つのリストを作りたいと思います。2つのリストを取って、重複を除いてどのように組み合わせるか?

他にも同様の質問がありますが、リストが数百万項目長いので、この問題を効果的に処理することは関係していないようです。

完全に無関係:私は、タグ候補ボックスが「あなたの質問を投稿」ボタンを覆う方法を嫌う唯一の人ですか?

+3

リストの項目は重要ですか? –

+0

いいえ、それらはソートされていません –

答えて

31

setを使用してください。

>>> first = [1, 2, 3, 4] 
>>> second = [3, 2, 5, 6, 7] 
>>> third = list(set(first) | set(second))  # '|' is union 
>>> third 
[1, 2, 3, 4, 5, 6, 7] 
+1

セットを使用せずにどうすればいいですか? – Dejell

+6

ちょっとuser225312、set()を2回呼び出してunionを使うと何かを得ることができますか?本能的に私はリストを書くだけです(set(first + second))。 – Cawb07

+0

この方法は、リストにハッシュしないタイプ(辞書リストなど)が含まれている場合は使用できません。 – Luke404

6
>>> l1 = range(10) 
>>> l2 = range(5, 15) 
>>> set(l1) | set(l2) 
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) 
2

誰かがset()せずにそれをしたい場合:

a = [1,2,3] 
b = [2,3,4] 
newlist=[] 
for i in a: 
    newlist.append(i) 
for z in b: 
    if z not in newlist: 
     newlist.append(z) 
newlist.sort() 
print newlist 
10

Aそれを行うには、わずかに、より効率的な方法:

>>> first = [1, 2, 3, 4] 
>>> second = [3, 2, 5, 6, 7] 

# New way 
>>> list(set(first + second)) 
[1, 2, 3, 4, 5, 6, 7] 
#1000000 loops, best of 3: 1.42 µs per loop 

# Old way 
>>> list(set(first) | set(second)) 
[1, 2, 3, 4, 5, 6, 7] 
#1000000 loops, best of 3: 1.83 µs per loop 

それが唯一持っているので、新しい方法は、より効率的です2の代わりに1つのセット()。

関連する問題