반응형
문자열 배열이 아닌 객체 배열의 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__
이것의 허용 대답하는 질문 표시 중복 .
반응형
'Programing' 카테고리의 다른 글
컬렉션에있는 모든 객체의 속성에 대해 .Max ()를 수행하고 최대 값으로 객체를 반환하는 방법 (0) | 2020.03.31 |
---|---|
왜 텍스트 영역에 신비한 공백이 가득합니까? (0) | 2020.03.31 |
캔버스 요소에서 마우스 클릭의 좌표를 얻으려면 어떻게해야합니까? (0) | 2020.03.30 |
통합 된 diff로 Github 풀 요청 다운로드 (0) | 2020.03.30 |
파이썬에서 문자를 정수로 변환하는 방법은 무엇입니까? (0) | 2020.03.30 |