Python: Добавить список для установки?

Если бы Вы пытались записать свою собственную версию Google затем, то это могло бы гарантировать его..!!!

Серьезно, хотя, если у Вас есть проблема, которую можно разложить на несколько меньших проблем затем, решение MapReduce работало бы. Документ Google о MapReduce имеет много хороших примеров, включая то, как обработать тысячи веб-страниц, слов количества в документе и т.д. и т.д.

207
задан Adam Matan 25 February 2011 в 09:25
поделиться

6 ответов

Вы не можете добавить список в набор, потому что списки изменяемы, то есть вы можете изменить содержимое списка после добавления его в набор.

Однако вы можете добавлять кортежи в набор, потому что вы не можете изменить содержимое кортежа:

>>> a.add(('f', 'g'))
>>> print a
set(['a', 'c', 'b', 'e', 'd', ('f', 'g')])

Изменить : некоторые пояснения: В документации набор определяется как неупорядоченный набор отдельных хешируемых объектов. Объекты должны быть хешируемыми, чтобы поиск, добавление и удаление элементов можно было выполнять быстрее, чем каждый раз при выполнении этих операций смотреть на каждый отдельный элемент. Конкретные используемые алгоритмы описаны в статье Википедии . Алгоритмы хеширования Pythons описаны на effbot.org , а функция pythons __ hash __ - в справочнике по питону .

  • list : используйте кортеж вместо
  • set : используйте frozenset вместо
  • dict : не имеет официального аналога, но есть некоторые recipes
  • Экземпляры объектов по умолчанию хешируются, и каждый экземпляр имеет уникальный хэш. Вы можете переопределить это поведение, как описано в справочнике по python.
  • 168
    ответ дан 23 November 2019 в 04:42
    поделиться

    Используйте 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: Если вы хотите добавить сам список, а не его элементы, тогда вы должны использовать кортеж, к сожалению. Члены набора должны быть хэшируемыми .

    490
    ответ дан 23 November 2019 в 04:42
    поделиться

    Наборы не могут иметь изменяемые (изменяемые) элементы / члены. Список, будучи изменяемым, не может быть членом набора.

    Поскольку наборы являются изменяемыми, у вас не может быть набора наборов! Однако у вас может быть набор frozensets.

    (Такое же «требование изменчивости» применяется к ключам dict.)

    Другие ответы уже дали вам код, я надеюсь, что это дает некоторое понимание. Надеюсь, Алекс Мартелли ответит еще подробнее.

    5
    ответ дан 23 November 2019 в 04:42
    поделиться

    объекты списка не хешируются . вы можете преобразовать их в кортежи.

    8
    ответ дан 23 November 2019 в 04:42
    поделиться

    Вы хотите добавить кортеж, а не список:

    >>> 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')])
    

    Если у вас есть список, вы можете преобразовать его в кортеж, как показано выше. Кортеж неизменен, поэтому его можно добавить в набор.

    4
    ответ дан 23 November 2019 в 04:42
    поделиться

    Вы захотите использовать хешируемые кортежи (вы не можете хешировать изменяемый объект, например список).

    >>> 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')])
    
    3
    ответ дан 23 November 2019 в 04:42
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: