3.11
昨日回顾
-
for循环
-
在循环取值上比while循环更简单
for x in 可迭代对象:
只要包含多个值,就可以被for循环
-
for循环能干的事while都能干,for循环次数取决于迭代对象的值的个数,while循环次数取决于条件
-
for i in range()
range(start,end,step)
py2与py3重range的区别
-
break,else,continue
-
-
基本数据类型
- int
- float
- str
今日内容
- 列表
- 元组
- 字典
正课
列表
作用
按位置存放多个值,取的时候可以用索引
定义
在中括号内用逗号分开多个任意类型的值
L = [1,2,3,4,’qqq’],实际上是用了 list()
功能,返回一个列表,赋值给L
类型转换
list()
:但凡能够被for 循环遍历的类型都可以当作参数传给 list() 转换成列表:列表,字典,元组,字符串
dic = {
'qqq':111,
'www':None,
'sss':[111,222,333]
}
name = 'deimos'
lis1 = list(dic)
lis2 = list(name)
print(lis1)
print(lis2)
#['qqq', 'www', 'sss']
#['d', 'e', 'i', 'm', 'o', 's']
list 底层相当于调用一个for 循环,遍历每一个元素,存入列表。所以 list9(dic)
取出的列表是字典的 key
字典是无序的,用 list 转换后,key的索引也是无序的,出现位置随。
内置方法
必须掌握的操作:读写
-
按照索引取值 list[index]
L = [111,222,'deimos']
-
正向取
print(L[0])
-
反向取
print(L[-1])
-
可以取也可以改
L[0] = 444
索引存在则修改列表内索引对应的值,无论是取还是赋值,索引不存在则报错
-
-
往列表里面追加值 list.append()
在列表最后添加一个值
-
往列表中插入值 llist.insert()
list.insert(index,item):把一个值放到指定的索引前面,index为int
list3 = [11,22,33,44] list3.insert(3,'w') print(list3)
-
往列表后面添加列表 list.extend()
传入参数:可迭代对象,必须传入一个可以被for循环的类型,将对象的每一个元素添加到列表中去
相当于
for item in 可迭代对象 list.append(item)
注意:这些方法都没有返回值,不能在print()中用 点 . 使用,与字符串中
.strip()
一类的方法不一样 -
dle 删除
del List:通用的删除方式,可以删除整个列表,也可以删除元素,没有返回值。
-
pop 删除
L.pop() :不传入参数,默认删除最后一个元素
L.pop(index) :传入一个索引,返回了被删除的值
list3 = [11,22,33,44] print(list3.pop(1)) # 22 print(list3) # [11, 33, 44]
-
**remove 删除 **
L.remove(‘item’):输入指定的元素,删除指定的元素,没有返回值。如果输入的参数在列表中不存在,则报错
按照需求选择删除的方法,想拿到被删除的值,就用pop,指定元素删除,用remove
-
切片 L[0:10:1]
list[start:end:step]
跟字符串一样,要头不要尾不传入参数,只传一个冒号:L[:],默认步长为1,从0开头切到结尾
切片等同于拷贝行为,相当于浅拷贝
list4 = list3[:] print(list3,id(list3)) print(list4,id(list4)) # [11, 22, 33, 44, 55] 2234423690240 # [11, 22, 33, 44, 55] 2234423690432 # 创建一个新列表,切片得到的元素继续指向原列表中的元素
取反向步长:
list1 = list[::-1] # 反向输出列表
-
循环 for
其他操作
-
list.count(item)
统计个数,看列表中出现这个元素的次数
-
list.index(item)
在列表中找一个元素,返回找到的第一个元素位置,没有则报错
-
list.clear()
没有参数,清空列表,不返回值
-
list.reverse()
将列表倒过来
-
list.sort(key = ,reverse = True/False)
针对列表内全为数字,或全为字符串,排序列表,默认从小到大排序(升序),要降序排列,加一个参数rever = True:list.sort(reverse = True)
该方法不返回值
list3 = [11,-22,33,-44,55] list4 = ['aaa','bbb','qqq'] list3.sort(reverse = True) print(list3) print(list4) # [55, 33, 11, -22, -44] # ['aaa', 'bbb', 'qqq']
字符串,列表排序的方法
-
排序字符串的方法:从左到右对字符串依次比较,第一位与第一位比,按照ascii表上的位置判断结果,如第一位一样则比第二位,以此类推
字母靠后,ASCII码大,Z < a < z
-
排序列表的方法:同字符串比较的方法
L1 = [111,22,'a'] L2 = [111,22,'c'] print(L1<L2) # True
第一个与第一个比,一样则第二个与第二个比,以此类推。两个列表同样位置的元素必须是同样的类型,否则报错
补充:队列,堆栈
-
队列:first in first out
先进先出,类似于扶梯,先上的一定先下
入队:list.append()
出队:list.pop(0)
-
堆栈:last in first out
后进先出,类似于上下电梯,后进的先出
入队:list.append()
出队:list.pop()
元组
作用
可以看作一个不可变的列表,按照索引存值,只用来读,不可改
定义
-
在小括号()内用逗号分隔开多个任意类型的元素
-
tup = (1,44,’a’,[’aa’,’bb’,3]),相当于使用了tuple()方法,赋值给tup
-
定义元组时若只有一个元素,必须加逗号
tup1 = (‘aaa’,)
-
元组不可变的意思是元组内索引及对应的内存地址不可变,而索引如果指向一个可变类型,则这个可变类型是可以改的
内存中使用列表,需要支持其读、写操作,使用元组,只需支持其读操作。所以同等数据量的情况下,元组比列表省空间
内置方法
- 索引取值
- 切片
- 长度 len()
- 成员运算
- 循环 for
- 查找索引 index(item)
- 计数 count(item)
字典
定义
在花括号{}内用逗号分隔开多个key:value,其中value可以是任何类型,key必须是不可变类型(元组也可以当key)
实际上底层调用的功能:dict()
- d = {} 默认定义的是空字典,而不是空集合
造字典的方式
-
直接定义
-
dict()+’ key = value’ 方式
d = dict(a = 1, b = 2, c = 3) print(d) # {'a': 1, 'b': 2, 'c': 3}
-
使用dict函数转换列表的数据类型
现有一可迭代对象,想把它的每个子元素取出来,第一个当作key,第二个当作value
可以使用for来做
info = [ ['name', 'deimos'], ('age', 18), ['sex', 'male'] ] d = {} for key, value in info: d[key] = value print(d) # {'name': 'deimos', 'age': 18, 'sex': 'male'}
或着使用dict直接定义
res = dict(info) print(res)
dict传入的对象中,每个子容器(列表,元组)必须要有两个元素,第一个用于key,第二个用于value,否则报错
-
快速初始化一个字典
将列表中每个元素取出来,作为字典的key,value为none,造一个字典
keys = ['a','b','c'] d = {}.formkeys(keys,None)
底层使用for循环,相当于遍历对象每一个值,加上None,赋值给空字典
内置方法
优先掌握
-
按key存取值:可存可取
d['key1'] = 222
若key存在,则覆盖旧值,若不存在,则创建新值
字典中key值不能重复,若重复,则下面的值会覆盖上面的值
-
求长度 len()
重复的键值不会被计入个数 -
成员运算 in
看某个key值是否在这个字典里
-
删除
-
通用删除 del
-
dic.pop(key)
根据key来删除,返回被删除key对应的value
-
dic.popitem()
随机删除一对键值,返回一个元组,元组中是刚刚删除的(key,value)
-
-
dic.keys()
列表得到全部的key
-
dic.values()
列表得到全部的value
-
dic.items()
拿到一个列表,列表中是一个个元组,元组中(key,value)形式存放键值
python2中这几个方法得到鸡蛋,python3中得到下单的母鸡:
- py2:生成一个真的列表
- py3:生成一个可迭代对象,节省内存
其他内置方法
-
dic.clear():清除字典,变成一个空字典
-
dic.copy():浅拷贝
-
dic.update(new_dic):更新字典,传入参数是一个字典,对老字典中的值,有的则覆盖值,没有的则创建
-
dic.get(key):字典取值的方法,若字典中存在key,则返回value;若不存在则不反回值
.get()方法,如果要取的key不存在也不会报错,容错性好
-
dic.setdefault(key,value):需求,对一个字典判断其是否存在这个key
- 如果存在,就不变,返回原字典中key对应的value
- 如果不存在,则将key,value加入原字典,返回字典中key原来对应的值
pass占位符,...
什么都不做,防止报错
总结
- 有序or无序
- 存一个值or存多个值
- 可变or不可变