列表
列表
- Python中的列表是只有索引数组
1. 修改, 添加, 删除元素
1. 在列表中添加元素
-
在列表末尾添加数据
-
使用方法
append()
-
列表名.append(要添加的值)
--- 无返回值 -
name = [1, 2, 3] name.append(4) print(name)
-
-
在列表中插入元素
-
insert(索引, 要插入的元素)
方法 --- 无返回值 -
name = [1, 2, 3] name.insert(2, 100) print(name)
-
2. 从列表中删除元素
-
使用
del
语句-
使用条件是知道要删除元素的索引
-
name = [1, 2, 3] del name[2] print(name)
-
-
使用方法pop()
-
返回值: 被删除的元素
-
pop(要删除元素的索引)
--- 不写默认是最后一个元素 -
name = [1, 2, 3] dels = name.pop(2) print(name) print(dels)
-
-
根据值删除元素
-
remove(要删除的值)
方法 -
无返回值, 会删除列表中的某个值的第一个匹配项。
name = [1, 2, 3] print(name)
-
2. 组织列表
1. 使用方法sort()
对列表进行永久排序
- 把列表的元素按照数字大小或是首字母顺序排序
- 这个方法永久性的修改元素的排列顺序
sort(reverse=True)
--- 反向排序
2. 使用函数sorted()
对列表临时排序
- 返回值是排序后的列表, 不会修改原来的列表
sorted(要排序的列表)
sorted(y要排序的列表, reverse=True)
3. 到这打印列表
- 使用方法
reverse()
--- 把原列表进行反转
4. 确定列表的长度
- 使用函数
len()
3. 创建数值列表
1. range()
函数
- 用法介绍:
range(101)
:可以用来产生0到100范围的整数,需要注意的是取不到101。range(1, 101)
:可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。range(1, 101, 2)
:可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。range(100, 0, -2)
:可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
2. 使用range()
创建数字列表
- 使用函数
list()
把range()
的结果转换为列表 max()
min()
函数可以快速找到列表的最大值
4. 使用列表的一部分
1. 切片
-
使用运算符
[:]
-
array = list(range(1, 101)) for i in array[3:10]: # 只循环切片的那一部分 print(i)
-
2. 复制列表
- 使用切片
[:]
不写就可以切到整个列表即复制
5. 生成式和生成器
-
我们还可以使用列表的生成式语法来创建列表
-
f = [x for x in range(1, 10)] print(f) f = [x + y for x in 'ABCDE' for y in '1234567'] print(f) # 用列表的生成表达式语法创建列表容器 # 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间 f = [x ** 2 for x in range(1, 1000)] print(sys.getsizeof(f)) # 查看对象占用内存的字节数 print(f) # 请注意下面的代码创建的不是一个列表而是一个生成器对象 # 通过生成器可以获取到数据但它不占用额外的空间存储数据 # 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间) f = (x ** 2 for x in range(1, 1000)) print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间 print(f) for val in f: print(val)
6. 元组
- 在Python中不可修改的列表叫做元祖
1. 定义元组
- 格式: 用圆括号括起来 ---
元组名(元素)
- 除了不可修改,其他操作都可以, 他就是一个特殊的列表
2. 修改元组变量
-
无法修改元组的值, 但可以修改变量的指向, 让变量指向其他元组
-
name = (1, 2) name = (3, 4) # 改变
这里有一个非常值得探讨的问题,我们已经有了列表这种数据结构,为什么还需要元组这样的类型呢?
- 元组中的元素是无法修改的,事实上我们在项目中尤其是多线程环境(后面会讲到)中可能更喜欢使用的是那些不变对象(一方面因为对象状态不能修改,所以可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护;另一方面因为没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销。一个不变对象可以方便的被共享访问)。所以结论就是:如果不需要对元素进行添加、删除、修改的时候,可以考虑使用元组,当然如果一个方法要返回多个值,使用元组也是不错的选择。
- 元组在创建时间和占用的空间上面都优于列表。我们可以使用sys模块的getsizeof函数来检查存储同样的元素的元组和列表各自占用了多少内存空间,这个很容易做到。我们也可以在ipython中使用魔法指令%timeit来分析创建同样内容的元组和列表所花费的时间,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~