0

如果属性title与我的搜索匹配,我有一个正在搜索的对象

class Something(object):
    def __init__(self,title):
        self.title = title

    def __str__(self):
        return "%s is the title " % self.title

调用对象时如何打印对象?这是我正在寻找它的方式。

search = " ".join(s[1:]).lower()
if any(search in str(a.title).lower() for a in something):
    print filter(lambda x: search in str(x.title),something)

If any(...)将检查搜索的任何部分是否与我的对象的标题匹配,如果找到任何内容,将返回 true。


filter(...)打印对象,但这是我遇到问题的地方打印:


[<__main__.Something object at 0x0000000002C93B38>, <__main__.Something object at 0x0000000002D33828>]


我知道这是一个对象,为什么不通过__str__(self)方法打印?如何从我的对象中调用打印功能Something

4

2 回答 2

0

通常,我会首先创建一个过滤器来获取符合您条件的项目。然后我会迭代它并做任何你想做的事情:

generator = (x for x in something if search in str(x.title).lower())
for item in generator:
   print item

这里的优点是您提前进行过滤(没有filter),并且您只进行一次过滤测试。

于 2013-10-04T03:24:24.770 回答
0

您正在打印 list 的字符串表示形式而不是列表中的每个项目。

你可以做:

print map(str, filter(lambda x: search in str(x.title),something))
于 2013-10-04T03:24:43.237 回答