2

在没有一大堆“for”和“if”循环的情况下,无法找到一个 python 解决方案来匹配一个列表中的元素与另一个列表中的元素。我希望找到更好的方法来做到这一点。我有一些大的迭代循环,它们通过多个列表来执行匹配。在比赛中,我希望删除列表中的元素。这里有两个例子:

def score_and_retweet(auth):
    api = tweepy.API(auth)
    for tweet in api.home_timeline(count=100, include_rts=0):
        for goodword in tweet_whitelist:
            if goodword in tweet.text and tweet.retweet_count >= 2:
                try:
                    api.retweet(tweet.id_str)
                except tweepy.error.TweepError:
                    error_id = tweet.id_str

t = time.localtime()
    if t.tm_hour is 14 and (t.tm_wday is 1 or t.tm_wday is 4):
        htmlfiles = glob.glob(html_file_dir+'/*.html')
        for file in htmlfiles:
            for badword in filename_badwords:
                if badword in file:
                    try:
                        htmlfiles.remove(file)
                    except ValueError:
                        error = "already removed"
4

2 回答 2

6

尝试回答这部分问题matching elements of one list against elements in another list可以使用set(),例如:

a = ['a','b','c','d','g']
b = ['a','c','g','f','z']

list(set(a).intersection(b)) # returns common elements in the two lists
于 2013-02-12T22:34:09.180 回答
1

不确定它会在性能方面发生多大变化,但您可以编写一个过滤器函数

例如在第二种情况下(如果您正在寻找完全匹配)

def fileFilter(f):
    if f in filename_badwords:
        return False
    else:
        return True

然后使用:

goodFiles = filter(fileFilter, htmlfiles)

与集合交集相比,它的优点是您可以根据需要使过滤器函数变得复杂(在第一个示例中您有多个条件)

于 2013-02-12T22:23:09.340 回答