2

「for」および「if」ループの山全体なしで、あるリストの要素を別のリストの要素と照合するためのPythonソリューションを見つけるのに問題があります。これを行うためのより良い方法を見つけることを望んでいます。一致を実行するために複数のリストを通過する大きな反復ループがいくつかあります。試合では、リストの要素を削除したい。以下に 2 つの例を示します。

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

パフォーマンスの点でどれだけ変わるかはわかりませんが、フィルター関数を書くことができます

たとえば、2 番目のケース (完全一致を探している場合)

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

次に使用します。

goodFiles = filter(fileFilter, htmlfiles)

これが集合交差に勝る利点は、フィルター関数を必要なだけ複雑にすることができることです (最初の例では複数の条件があります)。

于 2013-02-12T22:23:09.340 に答える