菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
290
0

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

原创
05/13 14:22
阅读数 31972

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,数据结构,时间复杂度都出来了。

屌。

发表评论

0/200
290 点赞
0 评论
收藏
为你推荐 换一批