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
。我這樣做是因爲list
是Python中的一個關鍵字,但是通過調用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
是可變的,而frozenset
不可以;那是我們可以添加的東西來設置,但不是frozenset
。但是,frozenset
是可散列的,而set
不是。那就是fozenset
可以是「詞典」或集合中元素的關鍵字。
可變性:
Hashability:
>>> 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])])
我希望這有助於。
謝謝!正如我所需要的那樣工作。我試圖按照邏輯 我瞭解子列表,刪除值爲0,然後測試成員資格。什麼是my_set的功能? – dimitarsp
+1不錯。非常好的解釋。 – mhawke