首页 > 代码库 > 数据库筛选用户,然后去掉一部分(列表求差),再随机返回一个用户。sqlalchemy + python集合(set) + random
数据库筛选用户,然后去掉一部分(列表求差),再随机返回一个用户。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,数据结构,时间复杂度都出来了。
屌。
数据库筛选用户,然后去掉一部分(列表求差),再随机返回一个用户。sqlalchemy + python集合(set) + random
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。