5

リストに重複を追加するのを防ぐためのより Pythonic (または簡潔な) 方法はありますか?

if item not in item_list:
    item_list.append(item)

それとも、これは実際には安価な操作ですか?

4

6 に答える 6

4

あなたのやり方は素晴らしいです!セットはこの種のものに役立ちますが、前述のように順序を維持しません。明確ではないかもしれませんが、もう少し簡潔に書く他の方法を以下に示します。

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]
于 2013-11-08T17:27:53.910 に答える
3

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])
于 2013-11-07T11:35:31.410 に答える
0

set()以下に示す組み込みlist()関数と、そのセット オブジェクトを通常の Python リストに変換する関数を使用できます。

item_list = ['a','b','b']

print list(set(item_list))
#['a', 'b']

注: セットを使用する場合、順序は維持されません

于 2013-11-07T11:35:26.420 に答える