Это массив или строка? - PullRequest
2 голосов
/ 22 февраля 2011

Мне даны данные, которые могут быть либо строкой, либо массивом.Мне нужно делать разные операции в зависимости от того, какая из них, поэтому мой вопрос, как я могу определить, является ли объект массивом или строкой в ​​Python?

conn = boto.connect_sdb(AWSKey, AWSSecret)
item = conn.get_domain(dName).get_item(imagekey)
tags = item['tag']

tags == array or string?

Ответы [ 4 ]

5 голосов
/ 22 февраля 2011

Правда, тот факт, что строки являются последовательностями, иногда неудобен. Если вы хотите реализовать другое поведение в зависимости от того, имеете ли вы дело с «реальной» последовательностью или строкой, вы можете использовать такую ​​конструкцию, как:

if isinstance(some_obj, basestring):
    # do string processing
else:
    # do sequence processing

Вам необходимо использовать basestring для правильной работы со строками Unicode и не-Unicode.

1 голос
/ 22 февраля 2011

Хороший способ справиться с этим - написать функцию, которая принимает список или один элемент, но всегда возвращает список (в последнем случае возвращает список с единственным элементом в нем).

def listify(value):
    if isinstance(value, basestring):
        return [value]
    try:
        iter(value)
    except TypeError:
        return [value]
    return value

Затем быстрый value = listify(value), и вы можете притворяться, что у вас все время есть список.

1 голос
/ 22 февраля 2011

Если под «массивом» вы подразумеваете список, то этого должно быть достаточно:

if isinstance(data, list):
    # [...]
if isinstance(data, str):
    # "..."

Если вы имеете в виду array.array вместо списка:

if isinstance(data, array.array):
    # ...
1 голос
/ 22 февраля 2011

Используйте это руководство для определения типа вашей переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...