Python Набор всех элементов во вложенном списке - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь вернуть все элементы вложенного списка в виде набора через эту функцию, но произошли ошибки.

list = [[0,4], [2,4], 5, [[[7,2], 3], 4]]

def setof(list):
  bag = set()
  for item in list:
    try: bag.add(item)
    except TypeError: bag.add(setof(item))
  return bag

print(setof(list))

Errors:
try: bag.add(item)
TypeError: unhashable type: ‘list’
During handling of the above exception, another exception occurred:
print(setof(list))
except TypeError: bag.add(setof(item))
TypeError: unhashable the: ‘set’

Кто-нибудь знает, почему это произошло или как это исправить? или лучший способ сделать это? Это мой первый раз здесь. Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Ваша проблема исходит от set.add(list). Это не то, что Python наборы принимают. Итак, вы хотите превратить все внутренние списки в наборы. Попробуйте это:

def setof(lst):
    bag = set()
    for item in lst:
        try:
            bag.add(set(item))
        except TypeError:
            bag.add(set([item]))
    return bag
0 голосов
/ 24 апреля 2020

bag.add(setof(item)) пытается добавить набор как элемент bag, а не объединять наборы. Используйте

bag.update(setof(item))
...