my_list = [[u'polySurface5.e[4]', u'polySurface5.e[1]', .5], [u'polySurface5.e[8]', u'polySurface5.e[2]', .9], [u'polySurface5.e[1]', u'polySurface5.e[4]', .5], [u'polySurface5.e[2]', u'polySurface5.e[9]', 1.2], [u'polySurface5.e[2]', u'polySurface5.e[2]', 0] ]
new_list = []
my_set = set()
for sublist in my_list:
if sublist[2] != 0:
frozen_sub = frozenset(sublist)
if not frozen_sub in my_set:
new_list.append(sublist)
my_set.add(frozen_sub)
結果:
>>> new_list
[[u'polySurface5.e[4]', u'polySurface5.e[1]', 0.5], [u'polySurface5.e[8]', u'polySurface5.e[2]', 0.9], [u'polySurface5.e[2]', u'polySurface5.e[9]', 1.2]]
元のリストの名前を に変更したことに注意してlist
くださいmy_list
。はPythonのキーワードであるため、実行list
しましたが、 an を呼び出すobject
list
ことでシャドウイングしています。これをチェックしてください:
>>> list((1,2,3))
[1, 2, 3]
>>> list = [3,4,5]
>>> list((6,7,8))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
編集:フォローアップ投稿に答えます。
set
一意のアイテムのみを含むデータ構造であり、アイテムには順序がありません。例えば:
>>> set([1,2,2,4,4])
set([1, 2, 4])
>>> set([1,2,4]) == set([4,4,4,1,2])
True
frozenset
は set に似たデータ構造ですが、違います。set
変更可能ですが、frozenset
そうではありません。つまり、 set には追加できますが、 には追加できませんfrozenset
。ただし、frozenset
ハッシュ可能ですが、そうでset
はありません。これはfozenset
、「辞書」のキーまたはセットの要素です。
可変性:
>>> b = set([1,2,3])
>>> b.add(6)
>>> b
set([1, 2, 3, 6])
>>> d = frozenset([1,2,3])
>>> d.add(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
ハッシュ可能性:
>>> b = set([1,2])
>>> d = set([5,3])
>>> g = set([b,d])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> b = frozenset([1,2])
>>> d = frozenset([5,3])
>>> g = set([b,d])
>>> g
set([frozenset([1, 2]), frozenset([3, 5])])
これが役立つことを願っています。