python проверка списка, но не строки, байты, символы и т. Д. - PullRequest
0 голосов
/ 24 января 2020

В python строки могут быть зациклены / повторены, как может быть список, кортежи и т. Д. c. У нас то же самое для dict и bytes. Итак, использование isinstance против любых коллекций. Ab c класс дает True в списке, байтах, dicts и т. Д. c.

Я ищу элегантный способ проверить, получил ли я список. как аргумент метода: список, кортеж, набор, массив numpy, серия pandas и т. д. c?

Есть ли у вас какие-либо предложения, которые не проверяются, если итеративные, но не являются ни строковыми, ни dict, et c.

Я действительно пытаюсь соответствовать интуитивному пониманию не-разработчиком того, что такое список.

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 января 2020

Другой вариант - проверить, является ли ваша переменная итерируемой, но вручную исключить то, что, по вашему мнению, не должно приниматься:

from collections.abc import Iterable

excluded_types = (str, dict)
if isinstance(obj, Iterable) and not isinstance(obj, excluded_types):
  do_something()

Но вы должны определить, какое итеративное поведение вы ожидаете, чтобы рассмотреть что-то "список -как».

1 голос
/ 24 января 2020

Вы можете создать свою собственную функцию для этого:

import numpy as np
import pandas as pd

def is_list_like(obj):
    valid_types = (list, tuple, set, np.ndarray, pd.Series)
    return isinstance(obj, valid_types)

Это работает для любого произвольного определения типа «список», которое вы предпочитаете использовать - просто добавляйте / удаляйте типы из кортежа valid_types.

...