基本数据类型
一、列表数据类型
1.1 列表的定义
概念:python中列表用来表示有序可变的元素的集合,元素可以是任意数据类型。
列表可以理解为一个盒子,什么东西都可以往里面放。列表是python数据类型里面最灵活的数据类型。
定义:由一对中括号进行定义,元素与元素之间用逗号隔开。
a = [] # 空列表
b = ["a", "b", "cde"] # 字符串列表项
c = [1, "b", "c"] # 数字列表项
d = [1, "b", []] # 列表列表项 一个列表里面可以有空列表,里面还可以放元素。
e = [1, "b", [2, "c"], []] # 嵌套列表 列表里面还有列表
print('a的类型为:', type(a)) # a的类型为: <class 'list'>
print('b的类型为:', type(b)) # b的类型为: <class 'list'>
print('c的类型为:', type(c)) # c的类型为: <class 'list'>
print('d的类型为:', type(d)) # d的类型为: <class 'list'>
print('e的类型为:', type(e)) # e的类型为: <class 'list'>
# 结果都为 <class 'list'>
Python中使用 list 表示列表
小技巧:当我们在pycharm中想要同时修改多个字符的时候,可以按住Alt键,然后多次选中后,松开Alt键 -输入替换的内容 pychram会帮你一次性替换全部内容。
1.2 列表的拼接
像字符串一样,列表之间可以进行加法运算实现列表的拼接,
列表也可以和整数进行乘法运算实现列表的重复
l1 = [1, 2, 3]
l2 = ['a', 'b', 'c']
print(l1+l2) # [1, 2, 3, 'a', 'b', 'c'] 加法运算 首尾相连
print(l2+l1) # ['a', 'b', 'c', 1, 2, 3] 两个相加的因子本身不会发生改变,只是会生成一个新的列表。
print(l1*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
1.3列表的索引和切片
序列的索引和切片操作完全一致,参见字符串。
列表的索引
ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(ls[0]) # 1
print(ls[-1]) # 9
print(ls[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1]
列表切片切出来的元素会形成一个新的列表
需要特别注意的是列表的嵌套取值
# 嵌套取值
ls = [1, 2, ['a', 'b', ['c', 'd']]]
# 要取 d 怎么取 ?
print(ls2[2]) # ['a', 'b', ['c', 'd']]
print(ls2[2][2]) # ['c', 'd']
print(ls2[2][2][1]) # d
ls3 = [1,2,['a','b']]
要取到'a'应该怎么取
print(ls3[2][0]) # ‘a'
例题:
疑问:为什么索引出来是整数,切片出来是列表 ?
索引是获取元素,索引的时候列表对应位置是什么元素就获取什么元素 它自己是什么数据类型索引出来就是什么数据类型。
而切片是从列表里面获取对应的元素,然后把它组成一个新的列表。
1.4 列表的常用操作
python中的列表操作非常灵活,是非常重要和经常使用的数据类型。
列表是一种容器,里面可以放任何数据类型,列表可以增 删 改
1.4.1 增
一个一个地加
.append(ele)
在调用这个方法的列表的末尾添加一个元素,(追加)
ls= [1, 2, 3]
res =ls.append(4) # append 本身不会有返回值 只会改变他原来的列表
print(res) # None
print(ls) # [1, 2, 3, 4]
lr = [1, 2, 3, 4]
lr.append([4,5])
print(lr) # [1, 2, 3, 4, [4, 5]]
print(ls[-1][-1] # 5
# 用append方法往列表中加入一个子列表时,会把加入的列表看作列表中的一个元素。
注意:
①、.append本身没有返回值,只会改变它原来的列表。
②、用append 往列表中加入一个子列表时,会把加入的子列表看作一个整体传入原列表。
.insert(index,ele)
在列表的指定索引的元素的前面插入一个元素
index 是索引,element是元素。
ls = [1, 2, 3]
ls.insert(0,0)
print(ls) # [0, 1, 2, 3]
ls.insert(1,0)
print(ls) # [0, 0, 1, 2, 3]
ls = [1, 2, 3]
a = 'a'
ls.insert(1,a)
print(ls) # [1, 'a', 2, 3] 里面也可以放变量
ls = [1, 2, 3, 4, 5, 6, 7]
ls.insert(4, 0)
print(ls) # [1, 2, 3, 4, 0, 5, 6, 7]
ls = [1, 2, 3, 4, 5, 6, 7]
ls.insert(-3, 0)
print(ls) # [1, 2, 3, 4, 0, 5, 6, 7]
ls3 = [1, 2, 3, 4, 5, 6, 7]
ls3.insert(4, [8, 9])
print(ls3) # [1, 2, 3, 4, [8, 9], 5, 6, 7]
注意:
①、insert方法:将元素插入指定位置的前面,原来该位置的元素会往右继续顺延,可以想象成插队。
②、insert没有返回值,它只会改变原列表。
③、insert不能插到最后,想插到最后只能使用append
一次加多个
.extend(iterable)
iterable:可迭代对象(比如列表,字符串等),
扩展列表,元素为传入的可迭代对象中的元素
ls1 = [1, 2, 3]
ls2 = [4, 5, 6]
ls1.extend(ls2) # 把 ls2中的值扩展到 ls1中
print(ls1) # [1, 2, 3, 4, 5, 6]
ls2.extend('abcde')
print(ls2) # [4, 5, 6, 'a', 'b', 'c', 'd', 'e']
ls3 = [1, 2, 3, 4, 5, 6, 7]
ls3.extend([8, 9])
print(ls3) [1, 2, 3, 4, 5, 6, 7, 8, 9]
ls4 = [1, 2, 3, 4, 5, 6, 7]
ls4.extend([[8, 9]])
print(ls4) # [1, 2, 3, 4, 5, 6, 7, [8, 9]]
ls5 =[1, 2, 3, 4, 5, 6, 7]
ls5.extend('clever')
print(ls) # [1, 2, 3, 4, 5, 6, 7, 'c', 'l', 'e', 'v', 'e', 'r']
注意
①:当用extend向列表中加入一个列表时候,会把列表脱掉把里面的元素分别放入加入的列表,但是注意它只会脱掉一层。
思考:ls1 + ls2的结果跟ls1.extend(ls2)的结果一样,它们的区别在哪?
ls1.extend(ls2):指的是把 ls1 当作主语,将ls2里面的值拓展到ls1中,是改变原来的列表。
但ls1 +ls2的意思是用ls1 和ls2的相加后形成一个新的列表,是获得一个新的列表。
1.4.2 删
删除一个指定索引元素
.pop(index = -1)
删除指定索引的元素,并返回该元素,如果不指定索引默认删除最后一个元素。
ls = [1, 2, 3]
res = ls.pop()
print(res) # 3
print(ls) # [1, 2]
ls = [1, 2, 3]
res = ls.pop(0)
print(res) # 1
print(ls) # [2,3]
如果删除一个不存在的索引位置的元素,会报错。
注意: pop方法有返回值
删除一个指定元素
.remove(value)
如果给你的列表很大,你不知道里面的顺序,这个时候.pop方法就不好用了。
从列表中删除第一个指定的值value,如果不存在则报错,没有返回值。
ls = ['a', 1, 2, 3, 1] # 把ls里面的第一个1删除,根据值删除。
res = ls.remove(1)
print(res) # None
print(ls) # ['a', 2, 3, 1]
删除多个元素
.clear()
清空列表,原列表变成空列表
ls = [1, 2, 3]
ls.clear()
print(ls) # []
例题:
解析:列表的pop方法没有指定索引的时候默认删除索引为-1的值并返回,remove没有返回值。
1.4.3 改
列表中的元素可以进行修改,
只需使用索引赋值即可
- 想要修改列表中指定索引位置的值,非常简单,通过索引赋值即可
ls = [1, 2, 3]
ls[1] = 'a'
print(ls) # [1, 'a', 3]
1.5 列表的其他方法
print(dir([])) # 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
- .copy 返回列表的一个浅拷贝,在讲可变与不可变类型的时候再详细讨论。
- .index(value,start=0,step=很大很大的一个数
返回列表中value的第一个元素的索引,start,stop是开始和结束的索引,表示的是范围,默认情况下是整个列表,如果value不存在会报错。
ls = [1, 2, 3, 4]
res = ls.index(1)
print(res) # 0
l2 = [1, 2, 3, 4, 1]
res = ls.index(1, 1) # 改变了范围,从索引为1的位置开始找第一个元素为1的索引
print(res) # 4
- .reverse 翻转列表元素顺序 本身没有返回值
ls = [1, 2, 3, 4, 1]
ls.reverse()
print(ls) # [1, 4, 3, 2, 1]
- sort 排序(key=None,reverse=False),对列表进行排序,默认按照从小到大的顺序,当参数 reverse=True 时,从大到小.,没有返回值。
ls = [1, 3, 7, 5, 11, 9]
ls.sort()
print(ls) # [1, 3, 5, 7, 9, 11]
ls = [1, 3, 7, 5, 11, 9]
ls.sort(reverse=True)
print(ls) # [11, 9, 7, 5, 3, 1]
注意:列表要排序的时候里面的元素一定要是相同数据类型的,要么都是整数,要么都是字符串…不然就会报错。
- .count(value) 返回value 在列表中出现的次数,如果没有则返回0
ls = [1, 4, 3, 3, 2, 2, 3]
res = ls.count(3)
print(res) # 3
1.6 列表和字符串的转换
字符串 -> 列表 list(str)
字符串是字符的序列,通过list函数可以将一个字符串转换成单个字符组成的列表(把字符串中的元素依次拿出来作为列表中的元素)
list(iterable) 里面放可迭代对象,然后把里面的值依次拿出来转换成列表。
s = 'abcdefg'
ls = list(s)
print(ls) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
列表-> 字符串 join
在列表中的元素都是字符串的情况下
使用 .join(str_iterable) 的方法(这是一个字符串的方法)
意思是用 ''作为连接符,把list里面的元素一一连接起来
str(list) 不可取
ls = ['a', 'b', 'c', 'd', 'e']
res = ''.join(ls) # 用左边作为连接符,把右边括号里面的内容连接起来。
print(res) # abcde
print(type(res)) # <class 'str'>
‘’.join(ls) 这个操作是我们经常会用到的
str.join(iterable)
返回一个由 iterable 中的字符串数据类型拼接而成的字符串,使用前面的str进行连接。
如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。 调用该方法的字符串将作为元素之间的分隔。
注意: join是字符串方法,括号里面的内容必须是字符串,如果有其他的数据类型就会报错。