W Pythonie mogę wykonać:
>>> list = ['a', 'b', 'c']
>>> ', '.join(list)
'a, b, c'
Czy jest jakiś prosty sposób, aby zrobić to samo, gdy mam listę obiektów?
>>> 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
Czy też muszę uciekać się do pętli for?
map
wyrażenia (poniżej).map
rozwiązanie.Wbudowany konstruktor ciągów automatycznie wywoła
obj.__str__
:źródło
reduce
został usunięty, ponieważ zwykle pozostawiał ludzi w zgadywaniu, a zatem nie był „pythoniczny”.map
z drugiej strony nie stanowi problemu.innym rozwiązaniem jest zastąpienie operatora złączenia klasy str.
Zdefiniujmy nową klasę my_string w następujący sposób
To możesz zrobić
i dostajesz
BTW, używając listy jako nazwy zmiennej, redefiniujesz klasę listy (słowo kluczowe)! Najlepiej użyj innej nazwy identyfikatora.
Mam nadzieję, że moja odpowiedź okaże się przydatna.
źródło
Wiem, że to bardzo stary post, ale myślę, że to, co przeoczyłem, jest nadrzędne
__repr__
, więc to__repr__ = __str__
, co jest akceptowaną odpowiedzią na to pytanie, jest oznaczone jako duplikat .źródło