python中difference_update_Python学习笔记-Python基础(二)

第1章 深入学习Python数据类型

Python3中有六个标准的数据类型:

Number(数字)

String(字符串)

List(列表)

Tuple(元组)

Dictionary(字典)

Sets(集合)

一、数字类型(Number)

Python3支持的数字类型:int(整型)、float(浮点型)、complex(复数)

数字类型定义的时候变量名后面直接跟数字,数字类型是不可变数据类型。

整型与浮点型

1、int(整型)

定义方式:

age = 18 #age=int(18)

用途:

年龄、等级、身份证号、QQ号等

2、float(浮点型)

定义方式:

salary = 3.1 #salary = float(3.1)

用途:

薪资、身高、体重、体质参数等

数字类型的基本操作

#数字的操作类型主要在程序中起到一个判断作用

num1=b'4' #bytes

num2=u'4' #Unicode

num3='四' #中文数字

num4='Ⅳ' #罗马数字

#isdigit()#作用就是判断是否是数字

print(num1.isdigit()) #True

print(num2.isdigit()) #True

print(num3.isdigit()) #False

print(num4.isdigit()) #False

#isdecimal #bytes类型无isdecimal方法,uncicode有

print(num2.isdecimal()) #True

print(num3.isdecimal()) #False

print(num4.isdecimal()) #False

#isnumberic #bytes类型无isnumberic方法,unicode,中文数字,罗马数字有

print(num2.isnumeric()) #True

print(num3.isnumeric()) #True

print(num4.isnumeric()) #True

View Code

Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a+bj,或者 complex(a,b) 表示,复数的实部 a 和 虚部 b 都是浮点型。

二、字符串(String)

定义字符串的时候需要用引号引起来,可以用单,双,三引号,三引号多表示多行字符串,这样就可以省掉“\n”换行符换行。字符串是不可变类型。

定义方式:

#单引号定义:

>>> msg = 'hello world'

>>> print(msg)

hello world#双引号定义:

>>> msg = "hello world"

>>> print(msg)

hello world#三引号定义:

msg='''hello,

my name is lionel wang,

how are you.'''

print(msg)

View Code

用途:

姓名、性别、住址等描述性数据

字符串常用操作

1、按索引取值(正向取+反向取),字符串只能取,不能改

>>> msg = 'hello world'

>>> print(msg[0])

h

>>> print(msg[-1])

d

2、切片(顾头不顾尾,步长)

>>> msg = 'hello world'

>>> print(msg[0:3])

hel>>> print(msg[0:7:2])

hlow>>> print(msg[5:1:-1])

oll>>> print(msg[-1:0:-1])

dlrow olle>>> print(msg[-1::-1])

dlrow olleh

View Code

3、长度len

>>> msg = 'hello world'

>>> print(msg.__len__())

11

>>> print(len(msg)) # msg.__len__()

11

4、成员运算in和not in

msg = 'hello world'

print('llo' inmsg)print('llo' not in msg)

5、删除空白(lstrip、rstrip、strip)

删除空白

6、字符串切分(split、rsplit)

split(seq=None, maxsplit=-1),不带参数默认是以空格为分隔符切片字符串,如果maxsplit参数有设置,则仅分隔maxsplit个字符串,返回切片后的子字符串拼接的列表。

#Linux系统passwd文件切分家目录

>>> path_info = 'root:x:0:0::/root:/bin/bash'

>>> print(path_info.split(':')[5])/root#Linux切割命令和参数

>>> cmd = 'get /root/a/b/c/d.txt'

>>> print(cmd.split())

['get', '/root/a/b/c/d.txt']#切割文件路径

>>> file_path= 'C:\\a\\d.txt'

>>> print(file_path.split('\\',1))

['C:', 'a\\d.txt']#rsplit从右往左切割

>>> file_path= 'C:\\a\\d.txt'

>>> print(file_path.rsplit('\\',1))

['C:\\a', 'd.txt']

View Code

7、循环

#打印字符串中所有字符

方法1:while循环

msg= 'hello world'size=len(msg)

n=0while n

n+= 1方法2:for循环

msg= 'hello world'

for i inmsg:print(i)

方法3:使用range函数

msg= 'hello world'

for i inrange(len(msg)):print(msg[i])

执行结果:

h

e

l

l

o

w

o

r

l

d

range函数介绍:

语法:range(start, stop[, step])

start:计数从start开始。默认是从0开始。例如:range(5)等价于range(0, 5)

stop:计数到stop结束,但不包括 stop。例如:range(0,5) 是[0, 1, 2, 3, 4]没有5

step:步长,默认为1。例如:range(0,5) 等价于range(0, 5, 1)

例子:for i in range(0,5,2):print(i)

执行结果:

02

4

View Code

8、修改字符串的大小写(title、upper、lower)

#string.title() 字符串首字母大写

>>> name = "lionel messi"

>>> print(name.title())

Lionel Messi#string.upper() 字符串全部大写

>>> name = "Lionel Messi"

>>> print(name.upper())

LIONEL MESSI#string.lower() 字符串全部小写

>>> name = "Lionel Messi"

>>> print(name.lower())

lionel messi

View Code

9、字符串拼接(“+”)

#Python使用加号(+)来合并字符串。

>>> first_name = "lionel"

>>> last_name = "messi"

>>> full_name = first_name + " " +last_name>>> print("Hello," + full_name.title() + "!")

Hello, Lionel Messi!#可以使用拼接来创建消息,再把整条消息存储在一个变量中。

>>> first_name = "lionel"

>>> last_name = "messi"

>>> full_name = first_name + " " +last_name>>> msg = "Hello," + full_name.title() + "!"

>>> print(msg)

Hello, Lionel Messi!

View Code

10、使用制表符或换行符来添加空白(\n\t)

在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。使用空白来组织输出,使其更易读。

>>> print("\tpython")

python>>> print("Languages:\n\tPython\n\tC\n\tC++")

Languages:

Python

C

C++

View Code

11、字符串替换(replace)

#语法:string.replace(old, new[, count]) 字符串替换#把字符串中的old子字符串替换成new子字符串,如果count指定,则替换不超过count次。

>>> name = 'alex say: i have one tesla,my name is alex'

>>> print(name.replace('alex','SB',1))

SB say: i have one tesla,my nameis alex

View Code

12、字符串格式化(format())

format()方法接受位置参数和关键字参数,二者均传递到一个叫做replacement字段。而这个replacement字段在字符串内有大括号({})表示。

格式化输出的三种玩法:

#按顺序传值

>>> print('{} {} {}'.format('lionel',18,'male'))

lionel18male#按索引传值

>>> print('{1} {0} {1}'.format('lionel',18,'male'))#按key/value方式传值

18 lionel 18

>>> print('{name} {age} {sex}'.format(name = 'wangzhiwei',age = 18,sex = 'male'))

wangzhiwei18 male

View Code

字符串中{1}、{0}和{1}跟位置有关,依次被format()的三个参数替换,那么format()的三个参数叫做位置参数。{name}、{age}和{sex}就相当于三个标签,format()将参数中等值的字符串替换进去,这就是字符串的关键参数。

练习:

#如果要把大括号打印出来,只需要用多一层的大括号包起来即可。

>>> print('{{0}}'.format("不打印"))

{0}#格式化输出小数点

>>> print('{0}: {1:.2f}'.format("圆周率",3.1415926))

圆周率:3.14

#位置参数{1}跟平常不同,后边多了个冒号。在替换域中,冒号表示格式化符号的开始,“.2”的意思是四舍五入保留到两位小数点,而f的意思是浮点数,所以按照格式化符号的要求打印出了3.14。

View Code

13、格式化操作符%

例子:

>>> print('%c' %97)

a>>> print('%c%c%c' %(70,105,67))

FiC>>> print('%d转换八进制是: %o' %(123,123))

123转换八进制是:173

>>> print('%f用科学计数法表示是: %e' %(1520000000,1520000000))1520000000.000000用科学计数法表示是: 1.520000e+09

View Code

例子:

>>> '%5.1f' %21.345

'21.3'

>>> '%.2e' %21.345

'2.13e+01'

View Code

14、以...开头,以...结尾(startswith、endswith)

>>> msg = 'lionel is male'

>>> print(msg.startswith('lionel'))

True>>> print(msg.startswith('lio'))

True>>> print(msg.endswith('male'))

True

View Code

15、将序列中的元素以指定的字符连接生成一个新的字符串(join)

>>> info = 'root:x:0:0'

>>> l = info.split(':')>>> print(':'.join(l))

root:x:0:0

View Code

16、判断输入的字符串是否是数字(isdigit)

age = input('>>:').strip()ifage.isdigit():

age=int(age)else:print('必须输入数字')

View Code

17、其他了解

1、find、rfind、index、rindex、count

2、center、ljust、rjust、zfill

3、expandtabs

4、captalize、swapcase

5、is其他

#find,rfind,index,rindex,count

name='egon say hello'

print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引#print(name.index('e',2,4)) #同上,但是找不到会报错

print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有

#center,ljust,rjust,zfill

name='egon'

print(name.center(30,'-'))print(name.ljust(30,'*'))print(name.rjust(30,'*'))print(name.zfill(50)) #用0填充

#expandtabs

name='egon\thello'

print(name)print(name.expandtabs(1))#captalize,swapcase,title

print(name.capitalize()) #首字母大写

print(name.swapcase()) #大小写翻转

msg='egon say hi'

print(msg.title()) #每个单词的首字母大写

#is数字系列#在python3中

num1=b'4' #bytes

num2=u'4' #unicode,python3中无需加u就是unicode

num3='四' #中文数字

num4='Ⅳ' #罗马数字

#isdigt:bytes,unicode

print(num1.isdigit()) #True

print(num2.isdigit()) #True

print(num3.isdigit()) #False

print(num4.isdigit()) #False

#isdecimal:uncicode#bytes类型无isdecimal方法

print(num2.isdecimal()) #True

print(num3.isdecimal()) #False

print(num4.isdecimal()) #False

#isnumberic:unicode,中文数字,罗马数字#bytes类型无isnumberic方法

print(num2.isnumeric()) #True

print(num3.isnumeric()) #True

print(num4.isnumeric()) #True

#三者不能判断浮点数

num5='4.3'

print(num5.isdigit())print(num5.isdecimal())print(num5.isnumeric())'''总结:

最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景

如果要判断中文数字或罗马数字,则需要用到isnumeric'''

#is其他

print('===>')

name='egon123'

print(name.isalnum()) #字符串由字母或数字组成

print(name.isalpha()) #字符串只由字母组成

print(name.isidentifier())print(name.islower())print(name.isupper())print(name.isspace())print(name.istitle())

View Code

三、列表(List)

列表是由一系列按特定顺序排列的元素组成。可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。

在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素。列表打印出来的还是列表。

定义方式:

“[]”内可以有多个任意类型的值,逗号分隔。

my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...])

l=list('abc')

View Code

用途:

多个装备,多个爱好,多门课程等

列表常用操作

1、列表之通过索引访问列表元素

在Python中,第一个列表元素的索引为0,而不是1。

例子1:>>> my_friends = ['wang','lionel','messi',4,10,30]>>> print(my_friends[0])

wang

例子2:使用字符串title()方法打印列表元素>>> my_friends = ['wang','lionel','messi',4,10,30]>>> print(my_friends[0].title())

Wang

例子3:打印最后一个列表元素>>> my_friends = ['wang','lionel','messi',4,10,30]>>> print(my_friends[-1])30

#Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让Python返回最后一个列表元素。索引-2返回倒数第二个列表元素,索引-3返回倒数第三个列表元素,以此类推。

View Code

2、列表之列表增删改(append、extend、insert、pop、remove)

#1、append() 增加列表元素#例子1:

>>> my_friends = ['wang','lionel','messi',4,10,30]>>> my_friends.append('wangzhiwei')>>> print(my_friends)

['wang', 'lionel', 'messi', 4, 10, 30, 'wangzhiwei']#注意:append()方法会将增加的元素放在列表末尾。

#例子2:定义一个空列表,再使用append()方法添加元素。

>>> lists=[]>>> lists.append('a')>>> lists.append('b')>>> lists.append('c')>>> print(lists)

['a', 'b', 'c']#2、extend() 向列表末尾添加多个元素

>>> number = [1,2,3]>>> number.extend(4,5) #extend()方法事实上使用一个列表来扩展另一个列表。

Traceback (most recent call last):

File"", line 1, in TypeError: extend() takes exactly one argument (2given)>>> number.extend([4,5])>>> print(number)

[1, 2, 3, 4, 5]#注意:extend()方法事实上使用一个列表来扩展另一个列表,所以它的参数应该是一个列表。

#3、 insert() 向列表任意位置插入

insert()方法有两个参数:第一个参数代表在列表中的位置,第二个参数是在这个位置处插入一个元素。#例子:

>>> number = [1,2,3]>>> number.insert(1,0)>>> print(number)

[1, 0, 2, 3]#4、pop()按照索引删除元素

将元素从列表中删除,并接着使用它的值。在Web应用程序中,可能要将用户从活跃成员列表中删除,并将其加入到非活跃成员列表中。方法pop()可删除列表末尾的元素,并让你能够接着使用它。#例子1:

>>> my_friends = ['wang', 'lionel', 'messi']>>>my_friends.pop()>>> print(my_friends)

['wang', 'lionel']#注意:pop()方法默认删除列表末尾的元素。

#例子2:根据索引删除元素

>>> my_friends = ['wang', 'lionel', 'messi']>>>my_friends.pop(0)>>> print(my_friends)

['lionel', 'messi']#5、remove()根据值删除元素

remove()函数用于移除列表中某个值的第一个匹配项。该方法没有返回值但是会移除列表中的某个值的第一个匹配项。#例子:

>>> my_friends = ['wang', 'lionel', 'messi']>>> my_friends.remove('lionel')>>> print(my_friends)

['wang', 'messi']#6、根据索引修改列表中的元素

根据索引修改列表中的元素,也就是根据索引赋值。#例子:

>>> my_friends = ['wang', 'lionel', 'messi']>>> my_friends[1]='abc'

>>> print(my_friends)

['wang', 'abc', 'messi']

View Code

3、列表之切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0、1和2的元素,第一个元素索引≥切片<最后一个元素索引。

#例子1:

>>> my_friends = ['wang', 'lionel', 'messi']>>> print(my_friends[0:2])

['wang', 'lionel']#例子2:如果没有指定第一个索引,Python将自动从列表开头开始

>>> my_friends = ['wang', 'lionel', 'messi']>>> print(my_friends[:2])

['wang', 'lionel']#例子3:如果没有指定最后一个索引,Python将自动提取从第一个元素索引到列表末尾的所有元素

>>> my_friends = ['wang', 'lionel', 'messi']>>> print(my_friends[1:])

['lionel', 'messi']#例子4:负数索引返回离列表末尾相应距离的元素,因此可以输出列表末尾的任何切片。

>>> my_friends = ['wang', 'lionel', 'messi']>>> print(my_friends[-2:])

['lionel', 'messi']

View Code

4、列表之统计列表长度(len()和__len__())

#例子1:

>>> my_friends = ['wang', 'lionel', 'messi']>>> print(len(my_friends))3

#例子2:

>>> my_friends = ['wang', 'lionel', 'messi']>>> print(my_friends.__len__())3

View Code

5、列表之in(包含)和not in(不包含)符号判断

在python中可以使用in符号判断指定的元素是否存在于列表中,返回值为布尔类型。

#例子1:

>>> my_friends = ['wang', 'lionel', 'messi']>>> print('asd' inmy_friends)

False>>> print('asd' not inmy_friends)

True#例子2:

>>> msg = 'my name is wangzhiwei'

>>> print('wangzhiwei' inmsg)

True

View Code

6、清空列表(clear)

clear()方法用于清空(或删除)列表中的所有数据项。

#例子:

>>> my_friends = ['wang', 'lionel', 'messi']>>>my_friends.clear()>>> print(my_friends)

[]

View Code

7、拷贝列表(copy)

copy()方法用于复制列表。

#例子:

>>> my_friends = ['wang', 'lionel', 'messi']>>> list =my_friends.copy()>>> print(list)

['wang', 'lionel', 'messi']

View Code

8、统计元素在列表中出现的次数(count)

#例子:

>>> my_friends = ['wang', 'lionel', 'messi','wang']>>> print(my_friends.count('wang'))2

View Code

9、从列表中找出某个值第一个匹配项的索引位置(index)

index()方法用于从列表中找出某个值第一个匹配项的索引位置。

#例子:

>>> my_friends = ['wang', 'lionel', 'messi','wang']>>> print(my_friends.index('wang'))

0

View Code

10、反向列表中元素(reverse)

#reverse()方法用于反向列表中元素。#例子:

>>> my_friends = ['wang', 'lionel', 'messi','wang']>>>my_friends.reverse()>>> print(my_friends)

['wang', 'messi', 'lionel', 'wang']

View Code

11、对原列表进行排序(sort)

sort()方法用于对原列表进行排序,默认从小到大排序。

#例子1:对原列表进行排序(从小到大)

>>> list = [2,3,1,-1]>>>list.sort()>>> print(list)

[-1, 1, 2, 3]#例子2:对原列表进行排序(从大到小)

>>> list = [2,3,1,-1]>>> list.sort(reverse=True)>>> print(list)

[3, 2, 1, -1]

View Code

12、解压序列 * 的妙用

#例子:打印第一个元素和最后一个元素

>>> data=['lionel',23,[2018,12,14]]>>> a,*_,b =data>>> print(a,b)

lionel [2018, 12, 14]

View Code

13、列表模拟队列

#练习1:模拟队列:先进先出#方法1:

fifo =[]#入队

fifo.append('first')

fifo.append('second')

fifo.append('third')print(fifo)#出队

print(fifo.pop(0))print(fifo.pop(0))print(fifo.pop(0))

执行结果:

['first', 'second', 'third']

first

second

third#方法2:

fifo =[]#入队

fifo.insert(0,'first')

fifo.insert(0,'second')

fifo.insert(0,'third')print(fifo)#出队

print(fifo.pop())print(fifo.pop())print(fifo.pop())

执行结果:

['third', 'second', 'first']

first

second

third#练习2:模拟堆栈:先进后出#方法1:

lifo =[]#入队

lifo.insert(0,'first')

lifo.insert(0,'second')

lifo.insert(0,'third')print(lifo)#出队

print(lifo.pop(0))print(lifo.pop(0))print(lifo.pop(0))

执行结果:

['first', 'second', 'third']

third

second

first#方法2:

lifo =[]#入队

lifo.append('first')

lifo.append('second')

lifo.append('third')print(lifo)#出队

print(lifo.pop())print(lifo.pop())print(lifo.pop())

执行结果:

['first', 'second', 'third']

third

second

first

View Code

四、元组(Tuple)

Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组 。

定义方式:

与列表类型比,只不过“[]”换成“()”。

age = (11,22,33,44,55) #本质age=tuple((11,22,33,44,55))

View Code

用途:

存多个值,对比列表来说,元组不可变(是可以当做字典的key),只用是用来读

元组常用操作

1、按索引取值(正向取+反向取):只能取按索引取值(正向取+反向取):只能取

age = (11,22,33,44,55)print(age[0])print(age[-1])

执行结果:11

55

View Code

2、切片(顾头不顾尾)

age = (11,22,33,44,55)print(age[0:3])print(age[2:])print(age[:2])

执行结果:

(11, 22, 33)

(33, 44, 55)

(11, 22)

View Code

3、统计元组长度(len)

age = (11,22,33,44,55)print(len(age))

执行结果:5

View Code

4、元组的成员运算(in和not in)

age = (11,22,33,44,55)print(22 inage)

执行结果:

True

View Code

5、遍历元组

age = (11,22,33,44,55)for item inage:print(item)

执行结果:11

22

33

44

55

View Code

6、从元组中找出某个值第一个匹配项的索引位置(index)

age = (11,22,44,33,55,33)print(age.index(33))

执行结果:3

View Code

7、统计元素在元组中出现的次数(count)

age = (11,22,44,33,55,33)print(age.count(33))

执行结果:2

View Code

五、字典(Dictionary)

在Python中,字典是一系列键值对(key/value) 。每个键都与一个值相关联,可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值,但是键必须是不可变类型(int、float、str、tuple)。

定义方式:

key必须是不可变类型(int,float,str,tuple),value可以是任意类型。

info = {'name':'lionel','age':18,'sex':'male'} #info=dict({'name':'lionel','age':18,'sex':'male'})

info=dict(name='lionel',age=18,sex='male')

info=dict([['name','lionel'],('age',18)])

{}.fromkeys(('name','age','sex'),None)

View Code

用途:

存放多个值,key:value,存取速度快。

字典常用操作

1、按key存取值:可存可取

#通过key取值

d = {'name':'lionel'}print(d['name'])

执行结果:

lionel#添加字典

d['age']=18

print(d)

执行结果:

{'name': 'lionel', 'age': 18}

View Code

2、统计字典长度(len)

info = {'name':'lionel','age':18,'sex':'male'}print(len(info))

执行结果:3

View Code

3、字典的成员运算(in和not in)

info = {'name':'lionel','age':18,'sex':'male'}print(len(info))

执行结果:3

View Code

4、字典的删除(pop、popitem)

pop()方法删除字典给定键key所对应的值,返回值为被删除的值。

popitem()方法随机返回并删除字典中的一对键和值(一般删除末尾对)。如果字典已经为空,却调用了此方法,就报出KeyError异常。

#pop()方法

info = {'name':'lionel','age':18,'sex':'male'}print(info.pop('name'))print(info)#popitem()方法

print(info.popitem())print(info)

执行结果:

lionel

{'age': 18, 'sex': 'male'}

('sex', 'male')

{'age': 18}

View Code

5、键keys(),值values(),键值对items()

key()用于返回字典中的键,values()用于返回字典中所有的值,item()返回字典中所有的键值对。

#key()方法

info = {'name':'lionel','age':18,'sex':'male'}print(info.keys())#将结果转化为列表

print(list(info.keys()))

执行结果:

dict_keys(['name', 'age', 'sex'])

['name', 'age', 'sex']#values()方法

info = {'name':'lionel','age':18,'sex':'male'}print(info.values())#将结果转化为列表

print(list(info.values()))

执行结果:

dict_values(['lionel', 18, 'male'])

['lionel', 18, 'male']#item()方法

info = {'name':'lionel','age':18,'sex':'male'}print(info.items())#将结果转化为列表

print(list(info.items()))

执行结果:

dict_items([('name', 'lionel'), ('age', 18), ('sex', 'male')])

[('name', 'lionel'), ('age', 18), ('sex', 'male')]

View Code

6、遍历字典

info = {'name':'lionel','age':18,'sex':'male'}for k ininfo:print(k,info[k])

View Code

7、get()方法使用

get()函数返回指定键的值,如果值不在字典中返回默认值(None)。

info = {'name':'lionel','age':18,'sex':'male'}print(info.get('hobbies'))print(info.get('hobbies','没有这个key'))print(info.pop('name1','None'))

执行结果:

None

没有这个key

None

View Code

8、更新字典(update)

update()函数把字典dict2的键/值对更新到dict1里。如果key存在,则修改对应value;如果key不存在,则插入。

info = {'name':'lionel','age':18,'sex':'male'}

d= {'x':1,'y':2,'name':'LIONEL'}

info.update(d)print(info)

执行结果:

{'name': 'LIONEL', 'age': 18, 'sex': 'male', 'x': 1, 'y': 2}

View Code

9、setdefault()方法使用

setdefault()方法和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。如果key存在,则不修改,返回已经有的key对应的value;如果key不存在就插入。

info = {'name':'lionel','age':16,'sex':'male'}

value=info.setdefault('age',18) #如果key存在,则不修改,返回已经有的key对应的value;如果key不存在就插入

print(value)print(info)

执行结果:16{'name': 'lionel', 'age': 16, 'sex': 'male'}

View Code

setdefault()用法升级版:

info={'name':'lionel','hobbies':['music']}

hobbies_list=info.setdefault('hobbies',[])print(hobbies_list)

hobbies_list.append('play')

hobbies_list.append('read')print(info)

执行结果:

['music']

{'name': 'lionel', 'hobbies': ['music', 'play', 'read']}

View Code

六、集合(Set)

set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

定义方式:

{}内用逗号分割,每个元素都必须是不可变类型,元素不能重复,无序。

s={1,2,3,1} #本质 s=set({1,2,3})

print(s)

用途:

关系运算,去重

集合常用操作

1、统计集合长度(len)

s={1,2,3,1}print(len(s))

执行结果:3

View Code

2、集合的成员运算(in和not in)

names={'lionel','wang'}print('wang' innames)

执行结果:

True

View Code

3、合集( | ):两个集合所有的元素

pythons={'egon','axx','ysb','wxx'}

linuxs={'egon','oldboy','oldgirl','smallboy','smallgirl'}print(pythons |linuxs)print(pythons.union(linuxs))

执行结果:

{'oldboy', 'axx', 'ysb', 'wxx', 'smallgirl', 'oldgirl', 'egon', 'smallboy'}

{'oldboy', 'axx', 'ysb', 'wxx', 'smallgirl', 'oldgirl', 'egon', 'smallboy'}

View Code

4、交集( & ):既属于A集合又属于B集合

pythons={'egon','axx','ysb','wxx'}

linuxs={'egon','oldboy','oldgirl','smallboy','smallgirl'}print(pythons &linuxs)print(pythons.intersection(linuxs))

执行结果:

{'egon'}

{'egon'}

View Code

5、差集( - ):所有属于A且不属于B的元素构成的集合

pythons={'egon','axx','ysb','wxx'}

linuxs={'egon','oldboy','oldgirl','smallboy','smallgirl'}print(pythons -linuxs)print(pythons.difference(linuxs))

执行结果:

{'ysb', 'wxx', 'axx'}

{'ysb', 'wxx', 'axx'}

View Code

6、对称差集( ^ ):没有同时出现在两个集合中的元素

pythons={'egon','axx','ysb','wxx'}

linuxs={'egon','oldboy','oldgirl','smallboy','smallgirl'}print(pythons ^linuxs)print(pythons.symmetric_difference(linuxs))

执行结果:

{'ysb', 'smallboy', 'axx', 'oldgirl', 'smallgirl', 'wxx', 'oldboy'}

{'ysb', 'smallboy', 'axx', 'oldgirl', 'smallgirl', 'wxx', 'oldboy'}

View Code

7、父集:>,>=

s1={1,2,3}

s2={1,2}print(s1 >s2)print(s1.issuperset(s2))

执行结果:

True

True

View Code

8、子集:

s1={1,2,3}

s2={1,2}print(s2

执行结果:

True

True

View Code

9、遍历字典

linuxs={'egon','oldboy','oldgirl','smallboy','smallgirl'}for stu inlinuxs:print(stu)

View Code

10、difference()和difference_update()区别

difference()表示集合A中存在,但是在B中不存在的元素,操作之后可以输出返回值查看。

difference_update()表示集合A中存在,但是在集合B中不存在的元素,并更新A集合,没有返回值。

s1={1,2,3}

s2={1,2}print(s1 -s2)print(s1.difference(s2))

s1.difference_update(s2)print(s1)

执行结果:

{3}

{3}

{3}

View Code

11、集合的删除(pop)

#随机删除集合中的一个元素

s2={1,2,3,4,5,'a'}print(s2.pop())

执行结果:1

View Code

12、集合的添加(add)

#向集合中添加元素,位置随机

s2={1,2,3,4,5,'a'}

s2.add('b')print(s2)

执行结果:

{1, 2, 3, 4, 5, 'b', 'a'}

View Code

13、删除的元素不存在,不报错(discard)

s2={1,2,3,4,5,'a'}

s2.discard('b')print(s2)

s2.discard('a')print(s2)

执行结果:

{'a', 1, 2, 3, 4, 5}

{1, 2, 3, 4, 5}

View Code

14、删除的元素不存在,则报错(remove)

s2={1,2,3,4,5,'a'}

s2.remove('b')print(s2)

执行结果:

Traceback (most recent call last):

File"/Users/wangzhiwei/python/day2/8 集合.py", line 95, in s2.remove('b')

KeyError:'b'

View Code

15、两个集合没有共同部分时,返回值为True

s1={1,2,3,4,5,'a'}

s2={'b','c'}print(s1.isdisjoint(s2))

执行结果:

True

View Code

16、更新集合

s2={1,2,3,4,5,'a'}

s2.update({6,7,8})print(s2)

执行结果:

{1, 2, 3, 4, 5, 6, 7, 8, 'a'}

View Code

七、数据类型总结

按存储空间的占用比(从低到高)

数字

字符串

集合:无序,即无序存索引相关信息

元组:有序,需要存索引相关信息,不可变

列表:有序,需要存索引相关信息,可变,需要处理数据的增删改

字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

按存储空间的占用区分(从低到高)

标量/原子类型

数字,字符串

容器类型

列表,元组,字典

按可变与不可变区分

可变

列表,字典

不可变

数字,字符串,元组

按访问顺序区分

直接访问

数字

顺序访问(序列类型)

字符串,列表,元组

key值访问(映射类型)

字典

第2章 练习

#要求:#1、打印省、市、县三级菜单#2、可返回上一级#3、可随时退出程序

#!/usr/bin/env python#-*- coding: utf-8 -*-#Author: Lionel Wang

menu={'北京':{'海淀':{'五道口':{'soho':{},'网易':{},'google':{}

},'中关村':{'爱奇艺':{},'汽车之家':{},'youku':{},

},'上地':{'百度':{},

},

},'昌平':{'沙河':{'老男孩':{},'北航':{},

},'天通苑':{},'回龙观':{},

},'朝阳':{},'东城':{},

},'上海':{'闵行':{"人民广场":{'炸鸡店':{}

}

},'闸北':{'火车战':{'携程':{}

}

},'浦东':{},

},'山东':{},

}

l=[]whileTrue:for k inmenu:print(k)

choice= input('>>:').strip()if choice == 'quit' or choice == 'exit':break

if choice == 'back':if len(l) == 0:break

print(menu)

menu=l.pop()print(menu)print(l)continue

if choice not in menu:continuel.append(menu)print(l)

menu=menu[choice]

View Code

你可能感兴趣的:(python中difference_update_Python学习笔记-Python基础(二))