Если бы Вы пытались записать свою собственную версию Google затем, то это могло бы гарантировать его..!!!
Серьезно, хотя, если у Вас есть проблема, которую можно разложить на несколько меньших проблем затем, решение MapReduce работало бы. Документ Google о MapReduce имеет много хороших примеров, включая то, как обработать тысячи веб-страниц, слов количества в документе и т.д. и т.д.
Вы не можете добавить список в набор, потому что списки изменяемы, то есть вы можете изменить содержимое списка после добавления его в набор.
Однако вы можете добавлять кортежи в набор, потому что вы не можете изменить содержимое кортежа:
>>> a.add(('f', 'g'))
>>> print a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
Изменить : некоторые пояснения: В документации набор
определяется как неупорядоченный набор отдельных хешируемых объектов. Объекты должны быть хешируемыми, чтобы поиск, добавление и удаление элементов можно было выполнять быстрее, чем каждый раз при выполнении этих операций смотреть на каждый отдельный элемент. Конкретные используемые алгоритмы описаны в статье Википедии . Алгоритмы хеширования Pythons описаны на effbot.org , а функция pythons __ hash __
- в справочнике по питону .
list
: используйте кортеж
вместо set
: используйте frozenset
вместо dict
: не имеет официального аналога, но есть некоторые
recipes Используйте set.update ()
или | =
>>> a = set('abc')
>>> l = ['d', 'e']
>>> a.update(l)
>>> a
{'e', 'b', 'c', 'd', 'a'}
>>> l = ['f', 'g']
>>> a |= set(l)
>>> a
{'e', 'b', 'f', 'c', 'd', 'g', 'a'}
edit: Если вы хотите добавить сам список, а не его элементы, тогда вы должны использовать кортеж, к сожалению. Члены набора должны быть хэшируемыми .
Наборы не могут иметь изменяемые (изменяемые) элементы / члены. Список, будучи изменяемым, не может быть членом набора.
Поскольку наборы являются изменяемыми, у вас не может быть набора наборов! Однако у вас может быть набор frozensets.
(Такое же «требование изменчивости» применяется к ключам dict.)
Другие ответы уже дали вам код, я надеюсь, что это дает некоторое понимание. Надеюсь, Алекс Мартелли ответит еще подробнее.
объекты списка не хешируются . вы можете преобразовать их в кортежи.
Вы хотите добавить кортеж, а не список:
>>> a=set('abcde')
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> l=['f','g']
>>> l
['f', 'g']
>>> t = tuple(l)
>>> t
('f', 'g')
>>> a.add(t)
>>> a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])
Если у вас есть список, вы можете преобразовать его в кортеж, как показано выше. Кортеж неизменен, поэтому его можно добавить в набор.
Вы захотите использовать хешируемые кортежи (вы не можете хешировать изменяемый объект, например список).
>>> a = set("abcde")
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> t = ('f', 'g')
>>> a.add(t)
>>> a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])