Python tests
7.51K subscribers
487 photos
1 video
45 links
Тесты и задания python разработчиков

По всем вопросам- @notxxx1

@ai_machinelearning_big_data - машинное обучение

@programming_books_it - бесплатные it книги

@pythonl - 🐍

@ArtificialIntelligencedl - AI

@datascienceiot -ds книги
Download Telegram
🧠 Хитрая задача по Python — что не так с set и списками?

Задача:
Вы хотите получить уникальные элементы из вложенных списков:


items = [[1, 2], [3, 4], [1, 2]]

unique = set(items)
print(unique)


Что произойдёт?

Варианты ответа:
1. Выведется: {[1, 2], [3, 4]}
2. Выведется: [[1, 2], [3, 4]]
3. Произойдёт ошибка
4. Все вложенные списки преобразуются в кортежи и выведутся без дубликатов

Правильный ответ: 3. Произойдёт ошибка

💥 TypeError: unhashable type: 'list'

🔍 Разбор

В Python элементы set должны быть хешируемыми. А списки — изменяемый тип данных, следовательно, не хешируемы.

То есть:


set([[1, 2], [3, 4]])
# вызовет ошибку


Как сделать правильно?

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


items = [[1, 2], [3, 4], [1, 2]]
unique = set(tuple(x) for x in items)
print(unique) # {(1, 2), (3, 4)}


А если хочется вернуть результат обратно в список списков:


result = [list(x) for x in unique]
print(result) # [[1, 2], [3, 4]] (порядок не гарантирован)


⚠️ Вывод

- list нельзя положить в set, dict как ключ — они unhashable
- Используйте tuple для таких случаев
- Уникальность вложенных списков — частый источник багов при работе с JSON, DataFrame, API

📌 Такие мелочи легко упустить, но они выстреливают в самых неожиданных местах. Подписывайся, чтобы не наступать на грабли в одиночку.