Python 比较列表

Python Compare lists

所以我有这个脚本,

good_users=[]

async def callposts(ctx):
    g0=str(ctx.guild)
    g=g0.replace(' ','_')
    sqluse(g)
    x="SELECT authorid, COUNT(*) FROM posts GROUP BY authorid"
    mycursor.execute(x)
    k=mycursor.fetchall()
    for user in k:
        if user[1] > 7:
            good_users.append(user)
            k.remove(user)
            print(user)
    return k

async def kick(ctx, uid):
    await ctx.guild.kick(ctx.guild.get_member(int(uid)))



@client.command(pass_context = True)
async def post_check(ctx):
    ausers=list(ctx.guild.members)
    lowposters= await callposts(ctx)
    for user in ausers:
        if user == client.user:
            print(user.name+" is a bot!")
            ausers.remove(user)
        elif user.id in exempt:
            print(user.name+" is exempt!")
            ausers.remove(user)
        elif user.id in good_users:
            print(user.name+" is a good user!")
            ausers.remove(user)
        else:
            await kick(ctx,user.id)
    print(ausers)

我在这里要做的是删除不活跃的用户。所以我有 2 个列表,我想将成员列表与豁免和 good_users 进行比较。我也在检查以确保它不是机器人。因此,此脚本会从列表中删除机器人,但不会删除豁免用户或良好用户。因此,它反过来会尝试踢掉所有不是机器人的人。 他们正试图接管!

我正在仔细查看,但现在我病了,所以不是 100%。

这些打印仅用于故障排除目的,但是,除了 callpost 函数中的第一个打印外,其他所有打印都没有打印任何内容,而且出于某种原因,那个打印只打印了用户,现在它没有打印机器人,所以机器人可能不是在要删除的列表中。

有什么想法吗?

您永远不会向 exempt_users 附加任何内容,并且由于 good_users 的范围,它只会填充 callposts() 内的用户,因为您在调用它时不会返回它在 post_check().

更改以下内容应该可以解决您的问题:

  • Return good_users 来自 callposts()
  • 在 post_check() 中调用 callposts() 的地方添加一个新变量,例如
lowposters, good_users = await callposts(ctx)

所以我终于弄明白了,脚本将 user.id 视为用户对象的属性。要解决这个问题,我必须使用

elif str(user.id) in exempt): and elif str(user.id) in good_users: