Python学习总结【连载】(六)
2018.06.20 Juttachen
概述
+ 21 列表补充
+ 22 元组
- 概念
- 元组的查
- 元组的运算符计算
+ 23 字典
- 概念
- 字典的查增删改
- 字典的方法和运算符计算
+ 24 集合
- 概念
- 集合的查增删
- 集合的数学运算
二十一、列表补充
1.关于对象
列表的值[a,b,c],类型是对象
对象类型:列表、字典、集合、元组、通过类创建的对象
变量在存储对象数据的时候,存的对象保存在内存中的地址。
如果用存对象的变量给另外一个变量赋值,赋的是地址
list1 = [1,2,3,4]
list2 = list1
list2[0] = 10
print(list2)
print(list1)
对象赋值的时候就会出现以上情况,两个变量指向同一个对象,任意变量改变一次对象,
另一个变量也会变,如果是有序的变量可以通过切片来避免这种问题(切片就是创建新的对象了)
或者用内置函数来拷贝
注意:如果变量里存的对象,要注意赋值的时候如果不想要两个变量相互影响,
就不要直接赋值而是拷贝对象产生新的对象然后赋值
list2 = list1[:]
list3 = list1.copy()
list3[1] = 100
list2[0] = 10
print(list1)
print(list2)
print(list3)
二十二、元组
1.概念
元组(tuple)就是不可变的列表
列表中除了增加、修改和删除相关的操作,其他都适用于元组。
什么时候用?就是存到容器中的数据不能被修改的时候使用,
比如:星期几对应的值
a. 声明元组
tuple1 = (1,2,3,4,'aa',True)
print(tuple1)
2.元组的查
print(tuple1[0])
print(tuple1[-1])
print(tuple1[:3])
for item in tuple1:
print(item)
for index in range(len(tuple1)):
print(tuple1[index])
3.元组的运算符计算
a.+,*运算
print((1,2,3)+("a","b"))
print((1,"a") * 3)
b. in ,not in
a = 10
print(a in (10,2,9,9))
print(a not in (10,2,9,9))
其他的增删改是不行的,tuple是不可变的,个数和元素都不能变
练习:输入1-7的数字,对应输入是星期几。如:输入1,就输出‘星期一’,输入7就输出‘星期日’
num1 = int(input('请输入1-7中任意数字:'))
tuple2 = ('星期一','星期二','星期三','星期四','星期五','星期六','星期日')
print(tuple2[num1-1])
# 注意:不要乱加条件,或者运行过程。
二十三、字典
字典是一个容器类的数据类型,以键值对(key:value)的形式来存储数据。
特点:字典是可变的(说明可以增删改查),但是是无序的(不能使用下标改变元素)。
键值对:以键:值的形式存在。我们真正要存的是值。
值可以是任何类型的数据;键理论上只能是不可变的数据类型的数据,在实际开发中一般用字符串
1.定义/声明一个字典(dict)
dict1 = {'name':'罗浩','age':18} # 声明了一个字典对象,存了两个键值对
dict2 = {'score':100,10:'aaa',(1,3):[10,23]}
print(dict2)
# dict3 = {[10,12]:'abc'}
# print(dict3)
# 键不能是可变的,报错:TypeError: unhashable type:'list'
声明一个字典,存小明的姓名、年龄、成绩、颜值
dict4 = {'name':'小明','age':18,'score':100,'face':90}
print(dict4)
2.字典的查增删改
a.查
1) 通过key去获取值
格式:字典名[key值]
print(dict4['age'])
# print(dict4['abc']) 字典中没有这个键,报错: KeyError:'abc'
2) 通过get方法获取值
格式:字典名.get(key)
什么时候用?获取字典中,不确定key对应的键值对是否存在的时候,就使用get方法
print(dict4.get('name'))
print(dict4.get('abe')) #结果是None
# None:python中的一个特殊值,表示没有,类似C中的NULL
练习:获取字典中的‘grade’对应的值,如果grade不存在就打印不存在,否则出值
str1 = dict4.get('grade')
if str1 == None:
print('不存在')
else:
print(str1)
3)遍历字典
注意:字典没有像列表的切片,要取多个只能用遍历字典
直接遍历字典拿到的是字典所有的key值,要拿值的话就通过key来做
dict4 = {'a':1,'b':2,'c':3}
for key in dict4:
print(key,dict4[key])
print(dict4.items())
for (key,value) in dict4.items():
print(key,value)
# 同时拿到key和value,但不推荐,因为在获取键值对前,需要有转换操作,计算机会消耗太多的cpu。
b.修改
通过Key去拿到对应的元素,然后重新赋值
dict4 = {'a':1,'b':2,'c':3}
dict4['a'] = 10
print(dict4)
-
练习:将上面的字典中所有的值变为原来的三倍*
dict4 = {'a':1,'b':2,'c':3} for key in dict4: dict4[key] *= 3 print(dict4)
c.增加
通过key取值,然后赋值(如果这个key不存在,就是添加键值对。如果key存在,就是修改这个Key对应的值)
由此可知:字典里面key一定是唯一的,而且不可变的。如果一个key写出了两个值,那么只有最后那个的值有意义,其他的都被销毁。
练习:增加键值对:'d':4
dict3 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
dict3['d'] = 4
print(dict3)
dict5 = {}
dict5['name'] = '张山'
dict5['color'] = 'red'
dict5['color'] = 'green'
print(dict5)
d.删除
(删除的是键值对,一个被销,另一个也会消失)
a.del语句
格式:del 字典[key]
dict1 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
del dict['b'] # 删除‘b’对应的键值对
print(dict1)
b.pop()方法
格式:字典.pop(key)
dict1.pop('a')
pirnt(dict1,result)
dict1 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
dict1.popitem() #popitem方法:随机删除(取出)一个元素
dict1 = {'a':1,'str':'string','b':2.5,'c':False,'d':[1,2,3]}
练习:将字典中,值为字符串的全部删除
for key in dict1.copy():
num = dict1[key]
if isinstance(dict2[key],str):
dict1.pop(key)
print(dict1)
3.字典的方法和运算符计算
a.keys和values方法
keys:获取字典中所有的key
values:获取字典中所有的值
dict1 = {'a':1,'b':2,'c':3}
print(dict.keys())
print(dict1.values())
b.update方法
字典.update(字典2):用字典2中的元素去更新字典1中的元素(如果字典2中的键值对字典没有,就直接添加。有的话就修改)
dict1.update({'a':1,'b':2.5,'c':False,'d':[1,2,3]})
print(dict1)
c.in 和 not in
判断字典中是否有指1定的key
print('a' in dict1)
print(100 in dict1)
二十四、集合
1.概述
集合也是一种容器类型
特点:无序的
元素的值是唯一的(不能重复)
数据存取是通过{}去存储元素,多个元素之间用逗号隔开。
声明一个集合
set1 = {1,2,3,4,1,10} # 结果是:{1,2,3,4,10}
print(set1)
# 将其他数据转换为集合的话,自带去重功能
# 将字符串转换成集合
set2 = set('abcdefjssbb')
print(set2)
常用的是:各种数据的相互转化
将列表转换成集合(当然元组也可以)
set3 = set([1,2,3,4,5,6,6,7])
print(set3)
将字典转换成集合(是将字典的key取出来作为集合的元素)
set4 = set({'a':1,'b':2,'c':3})
print(set4)
2.集合的查增删
a.查
在集合中不能单独获取某一个元素或部分元素,只能通过遍历的方式去获取每一个元素。
练习:将字符串str1 = 'abdaadhjkjjhks'去重
str1 = 'abdaadhjkjjhks'
set1 = set(str1)
str2 = ''
# 遍历集合
for x in set1:
str2 += x
str1 = str2
print(str1)
# 注意:顺序是不能控制的
b.增加
1)通过update增加:集合1.update(集合2):将集合2中的元素添加到集合1中。
set1 = set('123456')
set2 = set('abcd1')
set1.update(set2)
print(set1)
2)add:集合.add(元素):将指定的元素添加到指定的集合中。
set1.add('aaa')
print(set1)
c.删除
集合.remove(元素):将指定的元素从集合中删除,如果不存在则报错。
set1.remove('1')
print(set1)
3.集合的数学运算
python中的集合除了拥有作为容器相关的操作以外,还拥有数学中集合的相关操作
a.判断包含关系:>=,<=
set1 = set('abczef')
set2 = set('abcg')
集合1>=集合2:判断集合1中是否包含集合2,结果是布尔值
print(set1 >= set2)
集合1 <= 集合2:判断集合2中是否包含集合1
print(set1 <= set2)
b.|,&,-,^
set1 = set('123456')
set2 = set('456789')
| :求并集,在两个集合中所有的元素
print(set1 | set2)
& :求交集,两个集合都有的元素
print(set1 & set2)
-:在集合1中但是不在集合2中的所有元素
print(set1 - set2)
^:获取集合1和2中,除了公共部分以外的所有的元素
print(set1 ^ set2)
c.copy
将set1中所有的元素取出来,创建一个新的集合。
print(set1.copy())
什么时候用集合?
功能涉及到数学集合相关的操作的时候,就要想到用集合。