- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Python 使用 PRAW 函数制作一个 redditbot。机器人本身会检查 Reddit 子版 block 中的帖子标题中是否包含特定单词,如果是,则将其交叉发布到另一个 Reddit 子版 block 。然而,一旦发生这种情况,该过程就会重复创建重复的交叉帖子,我尝试通过标题比较来抵消这种情况,以便它过滤掉已经存在的帖子。
我正在尝试比较两个单独的 reddit 提交的字符串。因此,如果两个提交的标题匹配,则不要发布,如果不匹配,则发布。
下面的代码位于另一个 for 循环中,该循环检查另一个 subreddit 的内容,该代码工作正常,下面的 for 循环给我带来了问题。
变量名称,例如realtitle 和 realtitle1 存储第一个 for 循环的提交标题的原始标题。
对错误的代码和变量命名方案表示歉意。
import praw
from PyDictionary import PyDictionary
import enchant
from twisted.internet import task, reactor
timeout = 1800.0;
def FunctionName():
reddit = praw.Reddit(senstiveredditinfohere)
subreddit = reddit.subreddit("sub1");
source = reddit.subreddit("sub2");
for submission in source.new(limit=50):
realsubmission = submission;
title = submission.title.lower();
realtitle = submission.title;
realrealtitle = realtitle + " (by X)"
title1 = submission.title + " (by X)";
for submission1 in subreddit.new(limit=200):
if submission1.title == realrealtitle:
continue;
elif submission1.title != realrealtitle:
if "string1" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";
realtitle = "";
continue;
elif "string2" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";
realtitle = "";
continue;
elif "string3" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";
realtitle = "";
continue;
elif "string4" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";
realtitle = "";
continue;
elif "string5" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";
realtitle = "";
continue;
else:
break;
else:
break;
FunctionName()
l = task.LoopingCall(FunctionName)
l.start(timeout)
reactor.run()
最佳答案
我认为你的两个嵌套循环的逻辑从根本上是错误的。目前它的工作原理如下:
for x in first_iterable:
for y in second_iterable:
if x != y:
do_something(x)
尝试使用几个 range
作为您的可迭代对象,我想您会发现它没有按照您想要的方式进行。 do_something(x)
调用每次都会在 x
和 y
值不匹配时发生,可能有很多次每个 x
的时间。
对于您的用例,您希望每个 x
仅运行一次,并且仅在它从不匹配 y
时运行。为此,您可能需要更像这样的代码:
for x in first_iterable:
if x not in second_iterable:
do_something(x)
编写 not in
测试的另一种方法是使用 all(x != y for y in secondary_iterable)
(这对于比简单的不等式)。此代码将在运行 do_something(x)
之前检查 second_iterable
中的所有值,而不是在存在许多不匹配对时重复执行此操作。
用当前代码的术语来说(将多余的与标题相关的变量修剪为一个,并给它一个更好的名称):
for submission in source.new(limit=50):
crosspost_title = submission.title + " (by X)"
if all(crosspost_title != other.title for other in subreddit.new(limit=200)):
...
请注意,如果您将关键字检查(例如 "string1"
)移至检查帖子是否已交叉发布之前,可能会提高您的代码效率。我建议使用 any
进行该测试,而不是使用一大堆 if
测试,其中包含相同的代码(if any(keyword in title for keywords在[“string1”,“string2”,...]):
)。
关于python - 比较 Reddit 帖子标题不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54273867/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!