TypeError: unhashable type: 'list' при использовании встроенной функции set

У меня есть список, содержащий несколько списков в качестве элементов

eg: [[1,2,3,4],[4,5,6,7]] 

Если я использую встроенную функцию set для удаления дубликатов из этого списка, я получаю ошибку

 TypeError: unhashable type: 'list' 

Код, который я использую,

 TopP = sorted(set(TopP),reverse=True) 

Где TopP – это список, как, например,

Это неправильное использование set ()? Есть ли другой способ, которым я могу сортировать приведенный выше список?

  • «Псевдотерминал не будет выделен, потому что stdin не является терминалом» при запуске ssh через python без paramiko
  • расчет контрольной суммы udp python
  • Создайте papon soap-сервер на основе wsdl
  • Печенье Django CSRF не установлено
  • Python dateutils правило повторения печати в соответствии с форматом iCalendar (см. RFC 5545)
  • Python 2.x - вызов сон на миллисекундах в Windows
  • Пакет Python устанавливается с помощью pip или easy_install из repos
  • нажмите ввод через скрипт python
  • 4 Solutions collect form web for “TypeError: unhashable type: 'list' при использовании встроенной функции set”

    Наборы требуют, чтобы их элементы были хешируемыми . Из типов, предопределенных Python, только хешируемые только неизменяемые, такие как строки, числа и кортежи. Переменные типы, такие как списки и dicts, не хешируются, потому что изменение их содержимого изменит хэш и сломает код поиска.

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

     def uniq(lst): last = object() for item in lst: if item == last: continue yield item last = item def sort_and_deduplicate(l): return list(uniq(sorted(l, reverse=True))) 

    Устанавливает удаление повторяющихся элементов. Для этого элемент не может измениться во время установки. Списки могут меняться после их создания и называются «изменчивыми». Вы не можете вставлять изменчивые вещи в набор.

    Списки имеют непревзойденный эквивалент, называемый «кортежем». Вот как вы могли бы написать фрагмент кода, который взял список списков, удалил дубликаты списков, а затем отсортировал их в обратном порядке.

    result = sorted(set(map(tuple, my_list)), reverse=True)

    Примечание: если кортеж содержит список, кортеж по-прежнему считается изменчивым.

    Некоторые примеры:

     >>> hash( tuple() ) 3527539 >>> hash( dict() ) Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> hash( dict() ) TypeError: unhashable type: 'dict' >>> hash( list() ) Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> hash( list() ) TypeError: unhashable type: 'list' 
      python 3.2 >>>> from itertools import chain >>>> eg=sorted(list(set(list(chain(*eg)))), reverse=True) [7, 6, 5, 4, 3, 2, 1] ##### eg contain 2 list within a list. so if you want to use set() function you should flatten the list like [1, 2, 3, 4, 4, 5, 6, 7] >>> res= list(chain(*eg)) # [1, 2, 3, 4, 4, 5, 6, 7] >>> res1= set(res) # [1, 2, 3, 4, 5, 6, 7] >>> res1= sorted(res1,reverse=True) 

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

     mylist = [[1,2,3,4],[4,5,6,7]] mylist2 = [] for thing in mylist: thing = tuple(thing) mylist2.append(thing) set(mylist2) 
    Python - лучший язык программирования в мире.