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
может быть ключом в словаре или элементом в наборе.
Изменчивость:
>>> 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'
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