Pythonic способ принять один номер или список и использовать его как список (эквивалентно numpy.atleast_1d ()) - PullRequest
0 голосов
/ 19 июня 2019

У меня есть функция, которая принимает отдельные числа (например, int или float), но также структуру, подобную list. Этот аргумент всегда будет обрабатываться как list.

Каким был бы питонный способ преобразования аргументов с одним числом в список и создания списков?

Я бы предположил, что это работает, но это поднимает TypeError:

def foo(a):
    a = list(a)
    a.append(5)
    # and so on

Я не хочу создавать список из списка, подобного этому:

def foo(a):
    a = [a]
    a.append(5)
    # and so on

Ответы [ 4 ]

2 голосов
/ 19 июня 2019

Вы всегда можете использовать модель EAFP (проще просить прощения, чем разрешения) и просто использовать try/except:

def foo(a):
    try:
        a.append(5)
    except TypeError:
        a = [a]
        a.append(5)
    print(a)
foo(1)
foo([2])
2 голосов
/ 19 июня 2019

Вы можете использовать isinstance как

if (isinstance(a, list)):
    # Do something
else:
    # Do something

Вы можете сделать isinstance для любого типа, например, int.

Но более Pythonic способ, вероятно, будет

try:
    a.append(5)
except TypeError:
    a = [a]
    a.append(5)
1 голос
/ 19 июня 2019

Не могли бы вы сначала проверить, не является ли это списком, и сделать его одним, если его нет?

def foo(a):
    if not isinstance(a, list):
        a = [a]
    ...
    a.append(5)
0 голосов
/ 19 июня 2019

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

def func(a):
    return a+[5] if type(a) == type([]) else [a,5]

Например:

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