数据结构
python常用三种数据结构:列表、元组、字典
针对变量保存数据来说不能满足不同需求和存储大量的数据,python就需要有不同的数据结构来存储这些数据和满足需求
序列和索引
序列就是一组多项排序的数据,比如字符串、后面讲到的列表、元祖都属于序列
索引就是类似索引运算符,用来访问序列里面的具体数据,数据排序从做左到右,索引号从0开始,反过来右到左,就是最后一个为-1,-2以此类推
使用方法也同样跟索引运算符差不多
格式:【start:end:step】
start:开始索引号
end:结束索引号,不包含自己
step:步长,就是间隔依次访问,默认步长1
'''列表举例,列表用[]表示'''
a = ['abd',10,'我学python',100000,'aaaa']
print(a[1])
print(a[-1])
print(a[0:2])
print(a[0:4:2])
print(a[-2:4:2])
'''记住规则:开始为0,结束不包含,步长,冒号隔开'''
结果:
10
aaaa
['abd', 10]
['abd', '我学python']
[100000]
列表
创建列表
格式【】方括号,数据以逗号隔开
2种方式:【】,内置函数list()
a = [111,'abc','ss10']
b = list((111,'abc','ss10'))
'''函数后面是括号,再加一个括号代表是一个整体的参数\
整体里面分多个,因为函数参数只能带一个,这个在 join函数也很常用'''
print(a)
print(type(a))
print(b)
print(type(b))
结果
[111, 'abc', 'ss10']
<class 'list'>
[111, 'abc', 'ss10']
<class 'list'>
增加列表元素
第一种
格式:调用append()方法,函数方法调用以点跟参数,数据默认加入到最后
append()可以传入单值,也可以是一个列表或者元祖等,以一个整体加入,从而形成列表的嵌套用法
a = [111,'abc','ss10']
a.append('list')
a.append([10,11,12])
print(a)
结果
[111, 'abc', 'ss10', 'list', [10, 11, 12]]
第二种
上面【10,11,12】变成了一个列表嵌套到列表中了,如果不想把变成一个整体添加,可以使用extend()方法变成单个值追加
a = [111,'abc','ss10']
a.extend((10,11,12))
a.extend([10,11,12])
print(a)
'''没有区分整体是什么形式,只要代表一个整体我都按照里面单个值追加'''`在这里插入代码片`
结果:
[111, 'abc', 'ss10', 10, 11, 12, 10, 11, 12]
第三种
需要把值插入到想要的索引号位置
格式:insert(索引号,值)
a = [111,'abc','ss10']
a.insert(2,(10,11,12))
print(a)
结果
[111, 'abc', (10, 11, 12), 'ss10']
删除列表元素
第一种
格式:使用del 语句,不是函数没有括号,语句是一段可执行代码,循环语句 if for语句 break 语句等
del 语句可以删除列表,变量,还有可以删除一个范围
del 删除的是引用关系,不是具体的数据,前面文章讲过内存存储机制
a = [111,'abc','ss10']
b = a
del a
del b[0]
'''删除索引0值'''
print(b)
'''b的值还是存在的,del删的只是内存引用关系'''
print(a)
'''报错,因为a变量名称已经被删除了'''
结果
['abc', 'ss10']
Traceback (most recent call last):
File "D:/OneDrive/python/疯狂讲义/第二章.py", line 47, in <module>
print(a)
NameError: name 'a' is not defined
第二种
格式:调用remove()方式,只删除第一个匹配到的,没有匹配到就直接报错
a = [111,'abc','ss10',111]
a.remove(111)
a.remove(111)
'''删除2次才能把2个111删除'''
# a.remove(222)
#报错
print(a)
结果
['abc', 'ss10']
第三种
格式:调用clear()方法,不接受参数,只清空列表元素
a = [111,'abc','ss10',111]
a.clear()
print(a)
结果
[]
修改列表元素
直接根据索引号赋值=替换
a = [111,'abc','ss10',111]
a[0] = 'aaa'
a[-1] = 'bbb'
print(a)
结果
['aaa', 'abc', 'ss10', 'bbb']
同样该方法还可以删除元素
a = [111,'abc','ss10',111]
a[0:3] = []
'''删除索引0-2的值'''
print(a)
结果
[111]
同样该方法还可以插入元素
a = [111,'abc','ss10',111]
a[2:2] = [222]
'''起始位和结束为一样'''
print(a)
结果
[111, 'abc', 222, 'ss10', 111]
使用多索引号需要把值变成列表,列表值后面逗号
a = [111,'abc','ss10',111]
a[0:3] = ['aaaaa',]
print(a)
结果
['aaaaa', 111]
不然单个值就会被拆分单个
a = [111,'abc','ss10',111]
a[0:3] = 'aaaaa'
print(a)
#结果
['a', 'a', 'a', 'a', 'a', 111]
其他常用方法
print(dir(list))
查看全部使用方法
append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
count(),统计某个元素有几个
a = [111,'abc','ss10',111]
print(a.count(111))
#结果
2
index(),元素的索引号
格式:index(元素,开始索引号,结束索引号)
a = [111,'abc','ss10',111]
print(a.index(111))
print(a.index(111,1))
#结果
0
3
pop(),移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
格式:list.pop((索引号))
a = [111,'abc','ss10',111]
print(a.pop(-2))
#结果
ss10
reverse(),元素相反表示
a = [111,'abc','ss10',222]
a.reverse()
print(a)
#结果
[222, 'ss10', 'abc', 111]
sort(),对列表元素排序,默认根据字符编码号排序,不支持字符串和整数一个列表排序
a = [111,222,222,111]
b = ['aa','aaa','abc']
a.sort()
b.sort()
print(a)
print(b)
结果
[111, 111, 222, 222]
['aa', 'aaa', 'abc']
元组
格式()方括号,数据以逗号隔开
2种方式:(),内置函数tuple()
a = (111,'abc','ss10')
b = tuple((111,'abc','ss10'))
print(a)
print(type(a))
print(b)
print(type(b))
结果
(111, 'abc', 'ss10')
<class 'tuple'>
(111, 'abc', 'ss10')
<class 'tuple'>
可以看到方法跟列表一样,只是列表【】换成元组的()
列表和元组的区别
列表的元素是可以改变的,相当于变量
元组的元素不可改变,相当于常量
针对不同需求而选择,比如名字可以设置成元组类型,不允许程序更改
其他方法跟列表一样通用
列表和元组转换
转换成列表使用内置函数list()
转换成元组使用内置函数tuple()
a = (111,'abc','ss10')
b = range(1,10)
'''使用rang函数从1-9'''
b_list = list(b)
a_list = list(a)
print(a_list)
print(type(a_list))
print(b_list)
结果
[111, 'abc', 'ss10']
<class 'list'>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
相反的方法,列表同样转换成元组
列表和元组加号+,拼接
列表只能跟列表相加
元组只能跟元组相加
列表+元组就会报错
a = (111,'abc','ss10')
b = (222,'def',100)
print(a+b)
a = [111,'abc','ss10']
b = [222,'def',100]
print(a+b)
结果
(111, 'abc', 'ss10', 222, 'def', 100)
[111, 'abc', 'ss10', 222, 'def', 100]
列表和元组*,打印倍数
a = (111,'abc','ss10')
print(a*3)
#结果
(111, 'abc', 'ss10', 111, 'abc', 'ss10', 111, 'abc', 'ss10')
一个列表或元组的元素写法
a = 'aabb'
b = ('aabb')
c = ['aabb',]
print(type(a))
print(type(b))
print(type(c))
结果
<class 'str'>
<class 'str'>
<class 'list'>
b不是一个元组,元组和列表需要元素后面加上逗号,代表后面是空,一个元素就代表是字符串