zoukankan      html  css  js  c++  java
  • 数据库筛选用户,然后去掉一部分(列表求差),再随机返回一个用户。sqlalchemy + python集合(set) + random

    sqlalchemy和flask-sqlalchemy之间的东西不是太清晰。

    sqlalchemy文档太他妈多了。日。


    今天遇到的实例。


    用户进行随机匹配,系统随机返回一个一定筛选条件下的用户。为了用户体验,还得去掉已关注的人。


    首先获取满足筛选条件的用户列表:

    users = User.query.filter_by(school=form.school.data, sex=form.sex.data, status=form.status.data).all()

    且要获取已关注用户列表:

    followed = g.user.followed.all()  


    重点来了,怎样用第一个列表减还有一个列表?没这样的method,用for循环和if推断,时间复杂度应该超级大。

    所以,应该先列表转集合然后集合求差集再转列表。

    filter_users = list(set(users) - set(followed))    # 列表转集合求差集再转列表

    然后我们就要開始随机选一个用户了。找到python random模块的文档,发现choice()不错,在序列中随机选一个。

    注意,假设是空序列。会报错。

    所以,以下的代码为:

                if filter_users:
                    user = random.choice(filter_users)
                    flash(u'您匹配到的用户例如以下:')
                    return redirect(url_for('profile', id=user.id))
                else:
                    flash(u'啊哦,没有满足此条件的用户')    # 以后用吉祥物来表现。不要用flash
                    return render_template('match.html', form=form)



    以上。

    今天学到的东西不少,什么hash,数据结构,时间复杂度都出来了。

    屌。

  • 相关阅读:
    Web 2.0网站命名的7个建议
    梦猪课堂视频系列
    计算机英文术语完全介绍
    PPT高手的思路
    在线RSS阅读器大比拼
    【百度现有服务】
    转载VFW编程实例(详)
    实现MFC扩展DLL中导出类和对话框 (转)
    Windows下编译 OpenSceneGraph(转)
    OSG静态编译 (转)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5084088.html
Copyright © 2011-2022 走看看