day8 list/tuple/dict总结

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}

你可能感兴趣的:(day8 list/tuple/dict总结)