Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用_str__方法连接python对象列表_Python_String - Fatal编程技术网

使用_str__方法连接python对象列表

使用_str__方法连接python对象列表,python,string,Python,String,我已经看过了,但我的问题略有不同 代码如下: >>> class WeirdThing(object): ... def __init__(self): ... self.me = time.time() ... def __str__(self): ... return "%s" % self.me ... def __repr__(self): ... return ";%s;" % self.me .

我已经看过了,但我的问题略有不同

代码如下:

>>> 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

不过,每次我想将对象连接在一起时,最好不要这样做。这是不可能的吗?

在加入对象之前,您必须先将对象字符串化。这是因为
str.join
需要一系列字符串,您必须给它一系列字符串


为了减少以可读性为代价的键入,您可以执行
“\n”.join(map(str,list of of things)

从技术上讲,您并不是在加入python对象列表,只是它们的字符串表示

>>> reduce(lambda x,y: "%s\n%s" % (x,y), weird_list)
'1302226564.83\n1302226564.83\n1302226564.83'
>>> 
这也很管用,但看起来一点也不好:

>>> a = ""
>>> for x in weird_list:
...     a+="%s\n" % x
... 
>>> print a
1302226564.83
1302226564.83
1302226564.83

>>>

可能没有什么好办法

def strjoin(glue, iterable):
    return glue.join(str(s) for s in iterable)

如果您添加了
\uuuuu add\uuuu
方法,它是否对您有效

from operator import add
from random import randint

class WeirdThing(object):
    def __init__(self,me=None):
        self.me = me if me else chr(randint(97,122))
    def __str__(self):
        return "%s" % self.me
    def __repr__(self):
        return ";%s;" % self.me
    def __add__(self,other):
        new_me = add(str(self.me),str(other.me))
        return WeirdThing(new_me)

weird_list = [WeirdThing(), WeirdThing(), WeirdThing()]
print weird_list

[;y;, ;v;, ;u;]
yvu
而这个,

strange_thing = reduce(add,weird_list)
print strange_thing

[;y;, ;v;, ;u;]
yvu
“…最好不要每次都这样做…”

要避免将同一代码重复多次?请使用函数;:

def join_as_str(alist):
    return "\n".join(str(item) for item in alist)

继续并忽略函数正在输出的内容;这可以是具有
\uuu str\uuuu
方法的任何类。另一种方法是使用生成器表达式:
'\n'。join((str(x)表示事物列表中的x))
这就是OP在他的帖子中所说的,我相信这是比使用map更可取的方法。谢谢。我希望有某种方法可以使这一点隐式化,比如JavaScript在用作字符串时自动调用对象上的.toString()方法。然后我当然记得:
str.join()
具有线性复杂度,这是二次复杂度。对于任何长度的列表,这都会对生成的所有临时中间字符串产生可怕的性能。