无法找到一个python解决方案来匹配一个列表的元素与另一个列表中的元素,而没有一堆“for”和“if”循环。我希望找到一个更好的方法来做到这一点。我有一些大的迭代循环,通过多个列表来执行匹配。在匹配中,我希望删除列表的元素。以下是两个例子:
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"
答案 0 :(得分:2)
尝试回答问题的这一部分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
答案 1 :(得分:0)
不确定它在性能方面会有多大变化,但您可以编写过滤函数
例如在第二种情况下(如果您正在寻找完全匹配)
def fileFilter(f):
if f in filename_badwords:
return False
else:
return True
然后使用:
goodFiles = filter(fileFilter, htmlfiles)
它具有超过设置交集的优点是你可以使过滤器功能变得如你想要的那样复杂(你的第一个例子中有多个条件)