リストに重複を追加するのを防ぐためのより Pythonic (または簡潔な) 方法はありますか?
if item not in item_list:
item_list.append(item)
それとも、これは実際には安価な操作ですか?
あなたのやり方は素晴らしいです!セットはこの種のものに役立ちますが、前述のように順序を維持しません。明確ではないかもしれませんが、もう少し簡潔に書く他の方法を以下に示します。
item_list.append(item) if item not in item_list else None
と
item_list += [item] if item not in item_list else []
new_items = [item1, ...]
この最後のものは、複数を追加したい場合に適応できます
item_list += [item for item in new_items if item not in item_list]
a を使用してset
表示されたアイテムを追跡し、 set はlookupを提供しO(1)
ます。
>>> item_list = [1, 7, 7, 7, 11, 14 ,100, 100, 4, 4, 4]
>>> seen = set()
>>> item_list[:] = [item for item in item_list
if item not in seen and not seen.add(item)]
>>> item_list
[1, 7, 11, 14, 100, 4]
順序が重要でない場合は、単に on を使用set()
しitem_list
ます。
>>> set(item_list)
set([1, 100, 7, 11, 14, 4])
set()
以下に示す組み込みlist()
関数と、そのセット オブジェクトを通常の Python リストに変換する関数を使用できます。
item_list = ['a','b','b']
print list(set(item_list))
#['a', 'b']
注: セットを使用する場合、順序は維持されません