[python] 문자열 배열이 아닌 객체 배열의 Python string.join (list)

파이썬에서는 다음과 같이 할 수 있습니다.

>>> list = ['a', 'b', 'c']
>>> ', '.join(list)
'a, b, c'

객체 목록이있을 때 쉽게 할 수있는 방법이 있습니까?

>>> class Obj:
...     def __str__(self):
...         return 'name'
...
>>> list = [Obj(), Obj(), Obj()]
>>> ', '.join(list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, instance found

아니면 for 루프를 사용해야합니까?



답변

대신 목록 이해 또는 생성기 표현식을 사용할 수 있습니다.

', '.join([str(x) for x in list])  # list comprehension
', '.join(str(x) for x in list)    # generator expression


답변

내장 문자열 생성자는 자동으로 다음을 호출합니다 obj.__str__.

''.join(map(str,list))


답변

또 다른 해결책은 str 클래스의 결합 연산자를 대체하는 것입니다.

다음과 같이 새로운 클래스 my_string을 정의하자

class my_string(str):
    def join(self, l):
        l_tmp = [str(x) for x in l]
        return super(my_string, self).join(l_tmp)

그럼 넌 할 수있어

class Obj:
    def __str__(self):
        return 'name'

list = [Obj(), Obj(), Obj()]
comma = my_string(',')

print comma.join(list)

그리고 당신은 얻을

name,name,name

BTW, list 를 변수 이름 으로 사용 하여 목록 클래스 (키워드)를 재정의합니다! 다른 식별자 이름을 사용하는 것이 좋습니다.

내 대답이 도움이 되길 바랍니다.


답변

나는이 슈퍼 된 게시물입니다 알지만, 오버라이드 (override)됩니다 놓친 어떻게 생각 __repr__때문에, __repr__ = __str__이것의 허용 대답하는 질문 표시 중복 .


답변