序列
序列式一种数据存储方式,用于存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。
python中常用的序列结构有:字符串、列表、元组、字典、集合
列表简介
列表:用来存储任意数目、任意类型的数据集合。
例:a = 【1,2,3】
a =[10,20,‘abc’,True]
列表对象常用的方法汇总
python的列表大小可变,根据需要随时增加或减小。
字符串和列表都是序列类型,一个字符串是一个字符序列,一个列表是任何元素的序列。我们前面学习的很多字符串的方法,在列表中也是有类似的用法,几乎一模一样。害,天下内容一大套!!!
列表的创建
基本语法【】创建
a = [10,20,‘huzhuping’,‘hzp’]
a =[]
#创建一个空的列表对象
list()创建
使用list()可以将任何可迭代的数据转化成列表。
range()创建整数列表
range()可以帮助我们非常方便的创建整数列表,这在开发中及其应用中很重要
range([start,] end[,step])
start参数:可选,表示起始数字。默认是0
end参数:必选,表示结尾数字
python3中range()返回的是一个range对象,而不是列表。我们需要通过list()方法将其转换成列表。
推导式生成列表(简介一下,放在for循环重点说)
列表元素的增加和删除
当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及到列表元素的大量移动,效率较低。除非必要,我么一般只在列表的尾部添加或者删除元素,这样会大大提高列表的操作效率
append()方法
原地修改列表对象,是真正的列表尾部添加新的元素,速度最快
a = [20,40]
a.append(40)
a
[20, 40, 40]
+运算符操作
上次也说到,并不是真正的尾部添加元素,而是创建新的列表对象。这样会涉及大量的赋值操作。
extend()方法
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象
还是原来的地址。而且添加的是列表
insert()插入元素
可以将指定的元素插入到列表对象的任意指定位置/但这样会让插入位置后面的所有元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。其中,涉及到移动的函数还有remove() pop() del()
a = [10,20,30]
a.insert(2,100)
a
[10, 20, 100, 30]
乘法扩展
跟字符串时候差不多类似
a = [10,20]
b = a*3
b
[10, 20, 10, 20, 10, 20]
列表元素的删除
del删除
删除列表指定位置的元素
a = [10,20,30]
del a[1]
a
[10, 30]
列表元素访问和计数
通过索引直接访问元素
我们可以通过索引直接访问元素
index()获得指定元素在列表中首次出现的索引
index()可以获取指定元素首次出现的索引位置。语法是:index(value,[start,[end]]).
cout()获得指定元素在列表中出现的次数
count()可以返回指定元素在列表中出现的次数。
a = [10,20,30,40,50,20,30,20,30]
a.count(20)
3
len()返回列表长度
len()返回列表长度,也就是列表中有几个元素。
成员资格判断
判断列表中是否存在指定的元素。也可以用count(),不过没啥人用。
a = [10,20,30,40,50,20,30,20,30]
20 in a
True100 not in a
切片操作
我们在前面学习字符串的时候,学习过。列表几乎也是一模一样。切片的格式如下:
切片slice操作可以让我们快速提取列表或修改。标准格式为:[起始偏移量 start终止偏移量 end[:步长 step]]
注意:当步长省略时顺便可以省略第二个冒号
其他操作(三个量为负数)的情况:
切片操作时,起始偏移量和终止偏移量不止在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于也会当作,终止偏移量大于长度-1 也会当成最后的那个长度。例如:
列表的遍历
列表排序
修改原列表,不建新列表的排序
建立新列表的排序
我们也可以通过内置函数sorted()进行排序,这个方法返回新列表,不对原列表进行修改。
a
[10, 40, 20, 30]id(a)
2669860021704a = sorted(a)
a
[10, 20, 30, 40]id(a)
2669867274120
reversed()返回迭代器
reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。
这个只能使用一次。
a = [20,30,10,20]
c = reversed(a)
c
<list_reverseiterator object at 0x0000026DA039BBA8>list©
[20, 10, 30, 20]
只是空间上的翻转而已
列表相关的其他内置函数汇总
max和min
sum*
多维列表
二维列表
一维列表可以帮助我们存储一维、线性的数据。【10,20,30,40】
二维列表可以帮助我们存储二维、表格的数据;例如如下表格:
代码:
a = [
[“高小一”,18,30000,“北京”],
[“高小二”,19,20000,“上海”],
[“高小三”,20,10000,“深圳”],
]a
[[‘高小一’, 18, 30000, ‘北京’], [‘高小二’, 19, 20000, ‘上海’], [‘高小三’, 20, 10000, ‘深圳’]]a[0]
[‘高小一’, 18, 30000, ‘北京’]a[0][0]
‘高小一’a[0][3]
‘北京’
内存结构图:
元组tuple
列表属于可变序列,元组属于不可变序列,也就是不能修改元组中的元素。因此,元组没有增加元素、修改元素、删除元素的相关方法。
因此,我们只需要学习元组的创建和删除,元组中元素的访问和计数即可。
元组支持以下操作:
元组创建
1.通过()创建元组。小括号可以省略。
a = (10,20,30) 或者 a = 10,20,30
如果元组只有一个元素,则必须后面加逗号。这是因为解释器会把(1)解释为整数1,(1,)解释为元组。
a = (1)
type(a)
<class ‘int’>a =(1,)
type(a)
<class ‘tuple’>
2.通过tuple()创建元组
tuple(可迭代对象)
总结:
tuple()可以接受列表、字符串、其他序列类型、迭代器等生成元祖。
list()可以接收元组、字符串、其他序列类型、迭代器等生成列表。
元组的元素访问和计数
1.元组的元素不能修改
2.元组的元素访问和列表一样,只不过返回的仍然是元组。
3.列表关于排序的方法list.sort()是修改原列表对象,元组没有该方法。。如果对元组进行排序,只能使用内置函数sorted(tupleObj),并生成新的列表对象。
zip
zip(列表1,列表2,……)将多个列表对应位置的元素组合成元组,并返回这个zip对象。
a = [10,20,30]
b = [50,60,40]
d = zip(a,b)
d
<zip object at 0x000001F77E50CFC8>list(d)
[(10, 50), (20, 60), (30, 40)]
生成器推导式创建元组
从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。
我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的_next()_方法进行遍历吗或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
【操作】生成器的使用测试
元组总结
1元组的核心特点:不可变序列
2.元祖的访问和处理速度比列表快。
3.与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。