1.列表相关运算
-
数学运算:+,*
- 列表1+列表2 -- 将两个列表中元素合并产出一个新的列表,原列表不变
- 列表*N -- 列表中元素重复N次,产生一个新的列表
list1 = [1,2,3]
list2 = ['name','age']
new_list = list1 +list2
print(new_list,list1,list2)
print(list1*10)
list3 = [1]*10
print(list3)
-
2.比较运算: == ,!=
print([1,2]==[1,2]) #True
print([1,2]==[2,1]) #False
# >, <,<=,>= 只能比较两个列表中相同位置上对应元素类型一样时
-
in /not in 判断元素是否在列表中
2.内置函数
-
len(列表)、sum(列表)-- 要求列表中的元素必须是数字,max(列表),min(列表)
-
list(数据) -- 将指定数据转换成列表,所有序列都可以转换成列表(字符串,列表,字典,集合,元祖,range等)
-- 转换时将序列中的元素作为列表元素
print(max([1,100]))
print(list('abc')) #['a','b','c']
print(list(str(123))) #['1','2','3']
3.相关方法
-
a列表.count(元素) - 获取指定元素在列表中出现的次数,正整数
print([1,2,3,4,5,1,3,1,21].count(1))
-
b. 列表.extend(序列) -- 将序列中的元素添加到列表中,扩展列表长度
list1 = []
list1.extend('abc')
print(list1)
list1.extend(range(3))
print(list1)
list1.extend(('张飞','关羽','赵云'))
print(list1)
-
c.列表.index(元素) -- 获取指定元素在列表中的下标,只获取第一个
list2 = [1,2,3,45,65,646,643]
print(list2.index(65))
-
d.列表.reverse() -- 将列表中的元素倒序,不会产生新列表
list2 = [1,2,3,45,65,646,643]
list2.reverse()
print(list2)
list2 = [1,2,3,45,65,646,643]
print(list2,list2[::-1]) #产生一个新的列表
补充: 内置函数 reversed(序列) --效果同reverse,将序列中元素倒序,产生一个新的迭代器.不同点:产生一个新迭代器,但不会修改原序列
list2 = [1,2,3,45,65,646,643]
result = reversed(list2)
for item in result:
print(item)
print(list(result))
print(list2,reversed(list2))
-
5.列表.sort() -- 将列表中的元素从小到大排序(列表中元素类型一致,并且支持比较运算)
列表.sort(reverse=True) --从大到小
score2=[1,35,3,245,65,646,143]
score2.sort() #不会产生新的列表
print(score2) #python cookbook 流畅的python
score2.sort(reverse=True)
print(score2)
-
6.列表.copy() -- 产生一个新的列表,列表中元素一样,相互赋值.等同于 列表[:],产生新列表
list1=[1,2,3]
list2=list1
list3 = list1.copy()
print(list2,list3)
python中所有变量的实质都是数据在内存中的地址
list1.append(10)
print(list2,list3) #list2 和list3 不同
print(id(list1),id(list2),id(list3))
-
列表中删除数据
scores = [10,50,90,89,45,70]
删除列表中所有小于60的数字
for score in scores:
if score < 60:
scores.remove(score)
print(scores) #[50,90,89,70]
问题1:通过元素删除的时候,可能出现删除不完全的情况
scores = [10,50,90,89,45,70]
score = 10 if 10<60 scores.remove(10)
score = 90 if 90<60 #遍历时记录次数,因此取不到50
score = 89 if 89<60
'''
#解决办法1: 用list1.copy()或者list1[:] 产生一个新的列表
scores = [10,50,90,89,45,70]
scores1 =scores.copy()
for score in scores1: #for score in scores[:]:
if score < 60:
scores.remove(score)
del scores1 #清理内存,score只在遍历中运用,循环结束后没有其他用处
print(scores)
scores = [10,50,90,89,45,70]
scores1 = scores.copy()
score = 10 if 10<60 scores.remove(10)
score = 50 if 50<60 scores.remove(50)
score = 90 if 90<60
问题2:通过下标删除不满足要求的元素时,出现下标越界的错误
scores = [10,50,90,89,45,70]
删除列表中所有小于60的数字
for index in range(len(scores)):
if scores[index] < 60:
del scores[index]
print(scores) #报错:下标越界
'''
scores = [10,50,90,89,45,70]
for index in range(len(scores)):
index = range(6)
index = 0 scores[0] < 60 (if 10<60) del scores[10]
scores = [50,90,89,45,70]
index = 1 scores[1] < 60 (if 90<60)
scores = [50,90,89,45,70]
index = 2 scores[2] < 60 (if 89<60)
scores = [50,90,89,45,70]
index = 3 scores[3] < 60 (if 45<60)
scores = [50,90,89,70]
index = 4 scores[4] < 60 (list index out of range下标越界)
解决办法2
scores = [10,50,90,89,45,70]
#删除列表中所有小于60的数字
index = 0
while index < len(scores):
if scores[index]<60:
del scores[index]
else: #continue
index += 1 # index += 1
print(scores)
'''
scores = [10,50,90,89,45,70]
index = 0
while 0 < 6 if 10<60 del scores[10] scores = [50,90,89,45,70]
while 0 < 5 if 50<60 del scores[50] scores = [90,89,45,70]
==========================================================
1什么是tuple元祖
-
元祖是不可变的列表,作为序列:不可变(不支持增删改),但有序(支持下标操作)
-
(元素1,元素2,元素3,......) 元素要求和列表一样
2. 查 --获取元素(和列表一样)
tuple1 = (1,2,3,4)
print(tuple1[0])
print(tuple1[0:2:1])
for item in tuple1:
print(item)
for index in range(len(tuple1)):
print(index,tuple1[index])
3. 数学运算/比较运算/in not in/len()/sum/max() min()/tuple 和对应的列表操作一样,元素要求也一样
print((1,2,3)+(4,5,6,'a'))
print((1,2,3)*2)
print(1 in (1,2,3))
print(tuple('abcd'),tuple(range(3)),tuple([1,2,'a']))
4.元祖的特点
-
a.只有一个元素的元祖
tuple1 = ('abc', ) #需要在元素后加一个逗号(空)
print(type(tuple1))
-
b.表示元祖的值,可以去掉小括号(直接将多个元素用逗号隔开)
tuple1 = 10,20,'a'
print(tuple1,type(tuple1))
-
.c.让变量的个数和元祖中元素个数保持一致,可以让变量依次取出元祖中对应的元素
point = (100,200)
x,y=point
print(x,y)
x,y=100,200
用多个变量去获取元祖中元素,可以在某个变量前加* (*a),
将这个变量变成列表,获取其余变量取剩下的数据.
注意:带*的变量只能有一个
student = ('小明',30,60,50,100,175,70)
name,age,*scores,height,weight = student
print(age,scores) #30 [60,50,100]
==========================================================
1.什么是字典dict
-
字典是python内置的一个容器型数据类型:可变(支持增删改),无序(不支持下标操作)
-
{键值对1,键值对2,...} = {键1:值1, 键2:值2, 键3:值3, ....}
-
键(key):不可变的数据;唯一 (实际开发中建议用字符串)
-
值(valu):和列表中元素要求一样,任意数据类型
-
注意:键、值成对出现:字典存数据,实质存的是值,键是值的索引
dict1 = {'a':100, 'b':200,'c':[1,2]}
print(dict1)
2.什么时候用字典
-
如果同时保存多个具有相同意义的数据,用列表
-
如果同时保存的多个数据意义不同,使用字典
3.查 - 获取字典的值
-
a.获取key对应的值: 字典[key] --获取字典中指定key对应的值
dog1 = {'name':'大黄','type':'中华田园犬','color':'yellow'}
print(dog1['type']) #中华田园犬
#print(dog1['gender']) 如果key不存在,报错 keyError:'gender'
获取key对应的值 : 字典.get(key) -- 获取字典中指定key对应的值
字典.get(key,默认值) --如果key不存在,返回指定默认值
dog1 = {'name':'大黄','type':'中华田园犬','color':'yellow'}
print(dog1.get('type')) #中华田园犬
print(dog1.get('gender')) #如果key不存在,返回None
None是python中的关键字,表示数据没有或者空的意思
遍历:直接遍历字典,取出来的是key(非键值对),通过key取值
dog1 = {'name':'大黄','type':'中华田园犬','color':'yellow'}
for x in dog1:
print(x,dog1[x])
方法二: 不建议使用
for value in dog1.values():
print(x)
for key in dog1.keys():
print(key) #键
for key,value in dog1.items():
print(key,value)
4.增/改 -- 添加元素(键值对)
-
字典[key] = 值 当字典中key不存在时,添加键值对;当key存在时,修改key对应得值
film = {'name':'流浪地球','主演':'吴京','time':'2019-02-05'}
film['票房'] = '40亿'
film['time'] = '2019-2-6'
print(film)
-
字典.setdefault(key,value) - 只能填加元素,不能修改
film.setdefault('a',10) #添加元素
print(film)
5.删
-
del 字典[key] --删除字典中key对应的键值对;如果key不存在,会报错
film = {'name':'流浪地球','主演':'吴京','time':'2019-02-05'}
del film['time']
print(film) #{'name': '流浪地球', '主演': '吴京'}
-
字典.pop(key) -- 取出字典中key对应的键值对.
film = {'name':'流浪地球','主演':'吴京','time':'2019-02-05'}
name =film.pop('name')
print(name) #流浪地球
print(film) #{'主演': '吴京', 'time': '2019-02-05'}
6.相关运算
-
只支持比较运算符
print({'a':10,'b':20}=={'b':20,'a':10}) #True,字典无序
-
in / not in
-
key in 字典 -- 判断字典中存在某个key对应的键值对(判断key)
film = {'name':'流浪地球','主演':'吴京','time':'2019-02-05'}
print('name' in film) #True
print('流浪地球' in film) #False
-
len(), max(),min()
print(len(film)) #键值对个数 3
print(max(film)) #比较key的大小
-
dict() -- 将其他类型转换成字典;
注意:本身是一个序列,序列中的元素是小序列:小序列中有且只有两个元素,并且第一个元素不可变
print(dict([[1,2],['a',100],[100,[2]]])) #{1: 2, 'a': 100, 100: [2]}
-
字典转换成元祖或者列表时,是将字典中的key取出来,作为元祖或者列表的元素
print(list(film)) #['name', '主演', 'time'],只取key,作为列表的元素
print(tuple(film)) #('name', '主演', 'time')
print(str(film)) #'{'name': '流浪地球', '主演': '吴京', 'time': '2019-02-05'}'
7.相关方法
-
字典.clear() -- 清空字典
film.clear()
print(film) # {}
-
字典.copy() -- 复制字典的内容,产生一个新的字典
film = {'name':'流浪地球','主演':'吴京','time':'2019-02-05'}
film1 = film.copy()
film1['name'] = '死神'
print(film) #{'name': '流浪地球', '主演': '吴京', 'time': '2019-02-05'}
print(film1) #{'name': '死神', '主演': '吴京', 'time': '2019-02-05'}
-
dict.fromkeys(序列,值) -- 创建一个新的字典,将序列中的元素作为新字典的key,值都是一样的(指定的值)
new_dict = dict.fromkeys('abc','a')
print(new_dict) #{'a': 'a', 'b': 'a', 'c': 'a'}
-
字典1.update(字典2) -- 用字典2中键值对添加到字典1中,如果字典2中的key值在字典1中存在,则更新字典1中的值.字典1发生改变
dict1 = {'a':10,'b':20,'z':100}
dict1.update({'c':30,'b':200})
print(dict1) #{'a': 10, 'b': 200, 'z': 100, 'c': 30}