Подтвердить что ты не робот

Как проверить, является ли элемент списка списком (в Python)?

Если у нас есть следующий список:

list = ['UMM', 'Uma', ['Ulaster','Ulter']]

Если мне нужно выяснить, является ли элемент в списке самим списком, что я могу заменить aValidList в следующем коде на?

for e in list:
    if e == aValidList:
        return True

Есть ли специальный импорт для использования? Есть ли лучший способ проверить, является ли переменная/элемент списком?

4b9b3361

Ответ 1

Используйте isinstance:

if isinstance(e, list):

Если вы хотите проверить, что объект является списком или кортежем, передайте несколько классов в isinstance:

if isinstance(e, (list, tuple)):

Ответ 2

  • Определите, какие свойства list вы хотите, чтобы элементы имели. Нужно ли им индексировать? Sliceable? Нужен ли им метод .append()?

  • Посмотрите абстрактный базовый класс, который описывает этот конкретный тип в collections.

  • Используйте isinstance:

    isinstance(x, collections.MutableSequence)
    

Вы можете спросить: "Почему бы просто не использовать type(x) == list?" Вы не должны этого делать, потому что тогда вы не будете поддерживать то, что похоже на списки. И часть менталитета Python утиная печать:

Я вижу птицу, которая ходит как утка и плавает, как утка и шарлатанцы, как утка, я называю эту птицу утки

Другими словами, вы не должны требовать, чтобы объекты были list s, только что у них есть методы, которые вам понадобятся. Модуль collections предоставляет кучу абстрактных базовых классов, которые немного похожи на интерфейсы Java. Любой тип, который является экземпляром collections.Sequence, например, будет поддерживать индексирование.

Ответ 3

Выражение, которое вы ищете, может быть:

...
return any( isinstance(e, list) for e in my_list )

Тестирование:

>>> my_list = [1,2]
>>> any( isinstance(e, list) for e in my_list )
False
>>> my_list = [1,2, [3,4,5]]
>>> any( isinstance(e, list) for e in my_list )
True
>>>