使用 .join 函数连接实现 __str__ 方法的非字符串 Python 对象列表
我已经看过了关于在Python中表示字符串的这个问题,但我的问题稍微有点不同。它也和如何将列表中的项目连接成一个字符串的问题不同,因为那个问题是针对字符串列表的,所以对我这个问题没有任何帮助(我这个问题主要是处理非字符串项目的挑战)。
这是代码:
>>> class WeirdThing(object):
... def __init__(self):
... self.me = time.time()
... def __str__(self):
... return "%s" % self.me
... def __repr__(self):
... return ";%s;" % self.me
...
>>> weird_list = [WeirdThing(), WeirdThing(), WeirdThing()]
>>> print weird_list
[;1302217717.89;, ;1302217717.89;, ;1302217717.89;]
>>> "\n".join(weird_list)
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: sequence item 0: expected string, WeirdThing found
我意识到这样是可以的:
>>> "\n".join(str(wi) for wi in weird_list)
'1302217717.89\n1302217717.89\n1302217717.89'
>>>
不过,每次我想把这些对象放在一起的时候,能不能不这样做呢?这真的不可能吗?
5 个回答
3
可能没有什么特别好的方法。
def strjoin(glue, iterable):
return glue.join(str(s) for s in iterable)
3
“...每次都这样做可真麻烦...”
你想避免重复写同样的代码吗?那就用一个函数吧;
def join_as_str(alist):
return "\n".join(str(item) for item in alist)
14
在你把对象连接起来之前,得先把它们转换成字符串。这是因为 str.join
这个方法需要一系列的字符串,而你必须提供这样的字符串。
为了减少输入的内容,虽然可能会影响可读性,你可以使用 "\n".join(map(str, list_of_things))
这个写法。