如何搜索位于班级中的列表?

时间:2014-12-12 04:41:43

标签: python-3.x

您好我正在制作一个程序,可以接收和存储"推文"进入清单。我需要在推文中搜索作者或单词然后打印作者和搜索词中找到的所有推文。

def __init__(self):
    self.__tweet_r = []

def add_tweet_r(self, recent_tweet):
    self.__tweet_r.append(recent_tweet)

这是我的清单。 任何帮助都会非常感谢。

1 个答案:

答案 0 :(得分:0)

虽然您的问题询问是否搜索“位于类中的列表”,但您提供的两种方法表明这并未正确描述情况:列表不存储在类中,而是存储在实例中班级。实际上,该类的每个实例都有自己的列表。

您还没有说过如何表示“推文”,但您的要求表明您需要独立访问作者和正文。所以我假设推文是一个元组(作者,正文)。

让我们调用类C,其中包含您的两种方法和一种新方法,search_tweets

class C():
    def __init__(self):
        self.__tweet_r = []

    def add_tweet_r(self, recent_tweet):
        self.__tweet_r.append(recent_tweet)

    # Add this:
    def search_tweets(self, author=None, string=''):
        """Return a list of all tweets by author (if provided) and containing string."""
        return [ tweet for tweet in self.__tweet_r 
                 if (not author or author == tweet[0]) 
                    and string in tweet[1] ]

因为“推文”存储在C的实例中,所以首先我们创建一个,然后创建一些“推文”。

c = C()
c.add_tweet_r(('Mike', "Hi"))
c.add_tweet_r(('Joe', "Like Mike said, Hi."))
c.add_tweet_r(('Mike', "I'd gladly say it again, Hi"))
c.add_tweet_r(('Nancy', "Hip-hop extravaganza tonight 9pm at The Firetrap!"))
c.add_tweet_r(('Clem', "Yo."))

现在让我们以search_tweets为旋转:

import pprint
lst = c.search_tweets(author='Nancy')
pprint.pprint(lst)
lst = c.search_tweets(author='Mike', string="gladly")
pprint.pprint(lst)
lst = c.search_tweets(string="Hi")
pprint.pprint(lst)
# All tweets
lst = c.search_tweets()
pprint.pprint(lst)

这四项搜索打印出以下内容:

[('Nancy', 'Hip-hop extravaganza tonight 9pm at The Firetrap!')]
[('Mike', "I'd gladly say it again, Hi")]
[('Mike', 'Hi'),
 ('Joe', 'Like Mike said, Hi.'),
 ('Mike', "I'd gladly say it again, Hi"),
 ('Nancy', 'Hip-hop extravaganza tonight 9pm at The Firetrap!')]
[('Mike', 'Hi'),
 ('Joe', 'Like Mike said, Hi.'),
 ('Mike', "I'd gladly say it again, Hi"),
 ('Nancy', 'Hip-hop extravaganza tonight 9pm at The Firetrap!'),
 ('Clem', 'Yo.')]

search_tweets的“搜索单词”部分是天真的 - 请注意“Hip-hop”与“Hi”匹配。您可能希望将简单string in tweet[1]测试替换为像正则表达式更复杂的测试。但这应该让你开始。