Функция Python list () на (не) повторяемой - PullRequest
0 голосов
/ 19 января 2019

У меня проблема с функцией list(). У меня простой класс

class Foo(object):
   def __init__(self, value):
      self.value = value    

И я пытаюсь создать список с объектом Foo:

lhs = list(Foo(1))
...
rhs = list(Foo(2))

return lhs + rhs

Желаемый результат должен быть [Foo(1), Foo(2)]. Однако мне нужно использовать такой результат в рекурсивном вызове, поэтому на следующем шаге этот результат становится аргументом функции list() lhs, и я хочу добавить такой список другим элементом Foo:

lhs = list([Foo(1), Foo(2)])
...
rhs = list(Foo(3))

return lhs + rhs

И конечный результат должен быть [Foo(1), Foo(2), Foo(3)]. Проблема в том, что функция list(Foo(1)) вызывает TypeError, потому что Foo не повторяется. Есть ли способ как это исправить?

EDIT

Лучший вариант использования:

def create_foo(value):
   return Foo(value)

def concatenate(lhs, rhs):
   return list(lhs) + list(rhs)


concatenate(concatenate(create_foo(1), create_foo(2)), create_foo(3))

1 Ответ

0 голосов
/ 19 января 2019

Вы можете просто проверить списки и использовать .extend для объединения или .append для добавления элементов, не включенных в список:

class Foo:
    def __init__(self, value):
        self.value = value
    def __repr__(self):
        return f'Foo({self.value})'

def concat(*args):
    result = []
    for arg in args:
        if isinstance(arg,list):
            result.extend(arg)
        else:
            result.append(arg)
    return result

a = concat(Foo(1),Foo(2),Foo(3))
print(a)
b = concat(Foo(6),Foo(7))
print(b)
c = concat(a,Foo(4),Foo(5),b)
print(c)

Выход:

[Foo(1), Foo(2), Foo(3)]
[Foo(6), Foo(7)]
[Foo(1), Foo(2), Foo(3), Foo(4), Foo(5), Foo(6), Foo(7)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...