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


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

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

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

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

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

3 55

3 ответа:

использовать isinstance:

if isinstance(e, list):

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

if isinstance(e, (list, tuple)):
  1. выясните, какие конкретные свойства list вы хотите, чтобы элементы имели. Должны ли они быть индексируемыми? Нарезка? Они нуждаются в .append() способ?

  2. найдите абстрактный базовый класс, который описывает этот конкретный тип в collections модуль.

  3. использовать isinstance:

    isinstance(x, collections.MutableSequence)
    

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

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

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

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

...
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
>>>