关于列表自建索引的一点总结

Day39:列表的索引 在 Python 中,列表是一种有序的集合数据类型,每个元素都有一个位置,可以通过索引访问。索引在 Python 中从 0 开始,表示列表中每个元素的具体位置。除了正索引,Python 还支持负索引,表示从列表的末尾开始计数。通过索引,我们可以快速访问、修改和操作列表中的元素。 阅读详情

问题场景

最近接到一个产品需求,需要展示用户的参与的活动列表,这个列表需要根据活动的状态先排序,也即未结束的总是放在前,已结束都放在后面,并且相同状态下按照时间倒序,并支持分页功能

前期缺陷方案

项目使用mongo作为db,一开始看起来似乎挺简单,利用mongo多重order排序出来,再给个lastId作为分页就行了。后面发现产品需求未结束和已结束的时间排序并不是同一个时间,未结束按照创建时间倒序,已结束的按照结束时间倒序,分页中,首页拉去的如果出现了已结束,那么第二页和后面的记录也都会是已结束

思考和处理预案

  • 两种状态按照不同的时间倒序,如果是数据量小的,全都load出来然后在内存中排序就行了,但是现在是已经到要支持分页,数据量较大,这样是不现实的
  • 如果先查出未结束的条数有多少,然后根据传参的page和size来判断load多少条未结束和已结束的数据(分两次读取db,使用各自的时间倒序),似乎也是可行,但是mongo中分页其实最佳实践分页是要采用lastId和size,使用page页码mongo会使用scan全表扫,效率低下,使用page方式一般也只是在管理系统了。但是如果穿lastId上来,又不知道此时要读取第几页,也就无法预估当前页要多少条未结束和已结束的条目,此方案作废。
  • 这里暂时不考虑使用mongo内部js编程进行

回溯问题

这里的场景要求是先根据状态排序,然后再根据不同状态的不同时间排序,最后要支持分页查询。实质是状态-时间1,状态-时间2两条索引导致问题的,在分页上无法进行

解决方案

两条索引导致的问题,那假设现在只有一条索引,也就是假设都按时间1排序,那么事情就简单多了。顺着这个思路,就找到解决方法了——我们手工将两条索引合并。
创建一个新的mongo表,存储结构为:

uid,order,itemId(即用户数据存储的id)

uid和itemId好理解,那这个order怎么来的呢?这个就是我们设计的关键。我们将状态(设定一个数字码,未结束的号码大)拼上时间(这个时间,如果是未结束时创建时间,已结束是世界时间),合成一个数值,然后给这个order加上倒序索引。
这样,当查询uid下分页时候,order就是lastId的值,我们根据这个索引表就能返回有序的itemId,然后再去用户表里面顺序拉出来,这样就实现多状态下不同时间的倒序分页功能了。

效果和代价

这样做完全实现了产品的功能,但也是有代价的,每次查询时候要先查索引表再查实际的数据表,还有,我们新建数据时候,也要同时新建一条索引数据,当状态变化时候,我们也要相应更新索引表数据。

Python 列表的下标索引详解 掌握列表的索引方法,不仅能帮助你快速定位元素,还能提高代码的可读性和效率。负索引在不知道列表长度时非常有用,比如快速获取最后一个元素,而不需要。掌握列表索引操作,能够让你在 Python 编程中更加高效和灵活!是一种常见的数据结构,它可以存储多个元素,并且支持使用。数据结构,每个元素都有一个对应的索引(下标)。的,我们可以通过索引修改其中的元素。如果想知道某个元素的索引,可以使用。本文将详细介绍列表索引的用法,包括。:如果元素不在列表中,会报。在上面的代码中,我们使用。访问列表中的元素,索引。 阅读详情

相关推荐

告别MATLAB!用Python的PYPOWER搞定电力系统潮流计算(附Case30完整代码)

本文介绍了如何从MATLAB迁移到Python,使用PYPOWER工具包进行电力系统潮流计算。通过详细的环境准备、数据接口兼容性实践、潮流计算实现及最优潮流计算进阶,帮助工程师和学生无缝过渡到Python生态。文章还展示了结果处理与可视化技巧,并附有Case30完整代码示例。

weixin_30411819的博客 298

python 基础心得笔记——列表

一、列表的创建与操作 python里面的列表就相当于其他语言的数组。 创建列表的第一种方式,使用[ ] 创建列表的第二种方式,使用list[ ] lst=['hello','world',98] lst2=list([10,20,30]) print(lst) #['hello', 'world', 98] print(lst2) #[10, 20, 30] 结果: 列表的特点 1.有序排序 2.索引映射唯一数据 3.列表可存储重复数据 4.任意数据类型可以混存 5.根据需要动.

m0_54965420的博客 831

Apifox CLI + Claude Skills:将接口自动化测试融入ai

基于 Apifox CLI、Claude Code以及Claude Skills组合,实现自然语言触发接口自动化测试。

wwz_0012的博客 598

Python列表操作小技巧——索引、切片、增添、删除、修改和其他用法

关于列表,需要对其说明如下三点: 列表的构造是通过英文状态下的方括号完成的,即[]。可以将每一个元素存放在中括号中,而且列表中的元素是不受任何限制的,可以存放数值、字符串及其他数据结构的内容。 列表是一种序列,即每个列表元素是按照顺序存入的,这些元素都有一个属于自己的位置(或下标)。 列表是一种可变类型的数据结构,即可以实现对列表的修改,包括增加、删除和修改列表中的元素值。 一、列表的索引 “列表是一种序列”指的是可以通过索引(或下标)的方式实现列表元素的获取,Python中的索引都是用英文状态下的方括

Fo*(Bi)的博客 4万+

别再手动点按钮了!用C#给PowerMill做个自动化小助手(附完整源码)

本文详细介绍了如何使用C#进行PowerMill二次开发,打造自动化助手以提升CAM工程师的工作效率。通过实战案例和完整源码,展示了从环境配置到核心功能实现的完整流程,包括智能连接模块、项目批量处理器和刀路智能分析器等高级功能开发。

weixin_26899659的博客 347

学习stm32H7之路开始(STM32H7系列1) 前期准备,HAL库框架

2020.01.07 几个重要的参考网址 1.电子工程世界网 http://tags.eeworld.com.cn/tags/STM32H7 链接: link. 2.转:https://blog.youkuaiyun.com/simon223/article/list/2?t=1 链接: link. ———————————————— 版权声明:本文为优快云博主「Simon223」的原创文章,遵循 CC 4....

kengkengkeng963的博客 3409

python基础(序列、索引、切片、步长)

1.数据结构 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数、字符乃至其他数据结构)集合。在Python中,最基本的数据结构为序列(sequence)。序列中的每个元素都有编号,即其位置或索引,其中第一个元素的索引为0,第二个元素的索引为1,依此类推。在有些编程语言中,从1开始给序列中的元素编号,但从0开始指出相对于序列开头的偏移量。这显得更自然,同时可回绕到序列末尾,用负索引表示序...

jamfiy的博客 1万+

LLVM 编译器学习笔记之三十六-- 指令调度Instruction scheduling

1、参考Instruction scheduling in LLVM - 知乎,在中后端均存在指令调度 指令调度模型 2、在llvm12->llvm14 中Machine Instruction Scheduler有个patch增强了load/store指令的合并,也就是指令调度不仅仅只是改变指令的顺序,该优化类似gcc中的store-merge优化 .....................................................................

~ 飞 扬 的 天 空 ~ 5688

python基础——列表【创建,下标索引,常见操作方法】

python基础——列表【创建,下标索引,常见操作方法】详细介绍python列表的创建、下标索引以及python常见操作方法:index()、append()、extend()、insert()、del、pop、remove、clear、count、len

tan_run的博客 3775

基于人脸识别的课堂考勤系统 tkinter+openpyxl+face_recognition

基于face_recognition库实现人脸考勤系统功能。利用Python的tkinter模块来设计考勤系统的图形化界面,此外结合openpyxl模块,实现将学生的信息和考勤打卡数据保存到表格中,方便查看和调用。该系统具备“刷脸打卡”、“新学生注册”等功能。............

lyx4949的博客 6965

编程语言的未来走向:趋势、挑战与机遇

同时,鼓励他们接触和掌握一些专业领域的开发工具和技术框架,比如Web开发中的JavaScript、React.js,数据分析的Python(Pandas, NumPy, Matplotlib等),以及人工智能和机器学习领域的TensorFlow、PyTorch等。当前,全球范围内正积极推动编程教育的普及化,从儿童启蒙阶段到高等教育阶段,乃至终身学习的过程中,如何优化编程语言的教学方法、提高教学质量,并将其广泛应用于不同领域,是教育者与政策制定者面临的重大课题。未来,编程语言的多样化和包容性将会继续加强。

zrc_xiaoguo的博客 1829

〖Python全栈白宝书-免费版㉓〗- 列表的索引与切片

- 哪些数据类型里有索引的概念? ---> 字符串、列表、元组 - 从最左边记录的位置开始就是索引 - 索引用数字表示,起始位是从 `0` 开始 - 字符串、列表、元组的最大索引是他们的长度 - 1

易编橙 · 终身成长社群,相遇已是上上签! 480

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3826

python列表索引总结

Python包含6种内建序列: 列表 元组 字符串 Unicode字符串 buffer对象 xrange对象 1.数据结构 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数、字符乃至其他数据结构)集合。在Python中,最基本的数据结构为序列(sequence)。序列中的每个元素都有编号,即其位置或索引,其中第一个元素的索引为0,第二个元素的索引为1,依此类推。在有些编程语...

4万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python 列表查找,如何在列表中查找项目或者元素索引【翻译】

Python 列表查找,如何在列表中查找项目或者元素索引 在本文中,你将学习如何在Python中查找列表中包含元素的索引。 有几种方法可以实现这一点,在本文中,你将学习三种不同的方式用于查找列表元素的索引 三种技巧如下: 使用 index() 方法查找索引; 使用 for-loop; 使用列表推导式和 enumerate() 函数 Python 列表是什么? 列表是Python中的内置数据类型,也是最强大的数据结构之一。 它可以充当容器,用于存储相同变量名下的多个(通常是相关的)项。 每一个元素都被放

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 3万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python中获取列表的索引_python 中如何获取列表的索引

python 中如何获取列表的索引1.index方法list_a= [12,213,22,2,32]for a in list_a:print(list_a.index(a))结果: 0 1 2 3 4如果列表的没有重复的话那么用index完全可以的,那么如果列表中的元素有重复的呢?list_a= [12,213,22,2,2,22,2,2,32]for a in list_a:print(lis...

weixin_34581259的博客 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

列表、二维列表的索引和切片

列表的索引和切片 1.列表 定义:①可变的数据类型 ②数据类型不限 ③多个值用逗号(,)隔开 列表eg: list1=[1,2,3,'zhangqiaomiao'] print(list1) 二维列表(列表中的元素可以用列表表示) eg: list2=[[1,2,3], [4,5,6], ['zhangqiaomiao','weihailang']] print(list2) 2.列表的索引和切片: 索引:有序的列表中的元素都有其唯一对应的索引值,所有的索引值都是从0开始的,利用索引值进行索引和切片。

weixin_44769195的博客 1万+

27. Python 列表的索引取值

列表的索引取值和字符串取值语法一致,注意正索引编号从0开始即可。 本节重点掌握多次索引取值的语法:`列表[索引][索引]`。

weixin_63986098的博客 8866

python怎么输出列表中元素的索引_python怎么获取列表元素的索引

本文主要介绍了python中如何获取列表的索引,以及如何返回列表中某个值的索引。1、index方法list_a= [12,213,22,2,32]for a in list_a:print(list_a.index(a))结果:0 1 2 3 4如果列表中的元素没有重复的话,使用index方法完全是可以的,那么如果列表中的元素有重复的呢?list_a= [12,213,22,2,2,22,2,2,...

weixin_39815600的博客 1万+

python 返回列表索引_python怎么返回列表元素索引?

python中可以使用index()方法返回列表中指定元素的索引。Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。直接使用index()仅可以返回首个指定元素的索引:#!/usr/bin/pytho...

weixin_39727934的博客 2万+

python获取列表元素的索引值的方法

1、python列表的index()函数返回元素的索引,如果元素不存在,则引发ValueError。 lst = [10, 11, 12, 13, 14, 15, 20, 30, 40, 50] >>> lst [10, 11, 12, 13, 14, 15, 20, 30, 40, 50] >>> lst.index(10) 0 >>&...

Gordennizaicunzai的博客 4万+

速懂Python的列表信息,列表的索引,列表的切片,列表的加法,列表的切片,列表的成员运算,列表的内置函数,列表的遍历,列表的方法,列表的增删改查,元组与列表的主要区别

语法: 列表名 = [元素1,元素2,元素3,...]

好好吃饭,好好睡觉 1326

python 列表索引位置_python列表索引查找

如何在python列表中查找某个元素的索引方法一: 利用数组自身的特性 a.index(target), 其中a是目标list,target是需要的下标对应的值。代码如下: 可知索引为2。但是如果a中有多个76元素,这种方法仅仅能获取都第一个匹配的value的下标索引。方法二:利用enumerate函数。Python如何从列表中找出所有目标元素的索引以下是我写的程序,但是找不出bug在哪,CSS布...

weixin_39526564的博客 8118

【Python】一文向您介绍如何根据索引列表删除列表中的多个元素

🚀 深入Numpy,解锁排序新姿势!🔥 从基础到进阶,一文带您领略`np.argsort()`的排序魅力!📈 掌握排序原理,轻松应对各种应用场景!🎛️ 性能优化、注意事项一网打尽,让您事半功倍!🔍 高级用法、扩展功能一网打尽,解锁Numpy排序新境界!📚 读完这篇博客,您将掌握Numpy排序的精髓,让数据处理更高效!#Numpy #排序 #np.argsort() #性能优化 #高级用法

创作高质量博文,分享知识,共同进步! 1926

【Python】列表 List ② ( 使用下标索引访问列表 | 正向下标索引 | 反向下标索引 | 嵌套列表下标索引 | 下标索引越界错误 )

一、使用下标索引访问列表 1、下标索引用法 2、正向下标索引 3、反向下标索引 4、代码示例 - 列表下标索引基本用法 二、嵌套列表下标索引 1、嵌套列表下标索引简介 2、代码示例 - 嵌套列表下标索引 三、下标索引越界错误

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 5737

python中反向索引_列表索引和反向索引

Python与索引我一直在研究一个普通的Python代码来将数据从csv中分离出来。我的目标是使用多种策略重新创建这段代码,以便更好地理解Python。稍后将对该代码进行改进。我的代码是有效的,但有一些事情我不明白。这里是:with open('C:\My Super Secret Path\primary_debates_cleaned.csv') as primaryData:headers ...

weixin_28956763的博客 3309
上一篇: https是如何保证安全的?
下一篇: 关于粉丝号的一点总结
@云师兄
博客等级 码龄10年 10粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值