Python
有参考廖雪峰老师的网站结合学校的ppt和教材
推荐大家去看廖雪峰老师的教学
https://www.liaoxuefeng.com/
1 输入和输出
1.1 输出
用print()
在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world'
,用代码实现如下:
print('hello,world')
print()
函数可用接收多个字符串,用逗号‘,’隔开,可用连成一串输出
print('The quick brown fox', 'jumps over', 'the lazy dog') //The quick brown fox jumps over the lazy dog
print()
也可以打印整数,或者计算结果
print(300) //300
print(100+200) //300
1.2 输入
input()可以让用户输入字符串,并放到一个变量里。
name = input()
请注意当我们使用input()
输入的数据来进行条件判断的时候,需要使用int()
方法来把str
转为整数,才能进行条件判断
2 python基础
Python的语法比较简单,采用缩进方式,写出来的代码就像下面的样子:
a = 100
if a>=0:
print(a)
else
print(-a)
在实际应用中,常常会有多行注释的需求。同样也可以在每一行前加#号就行。
(1) 井号注释#
(2) 单引号注释 ’’’
’’’该多行注释使用的是三个单引号 ’’’
(3) 双引号注释“““
”””该多行注释使用的是三个双引号”””
-
应该始终坚持使用4个空格的缩进。
-
Python程序是大小写敏感的。
-
标识符不能以数字开头,以下划线开头的具有特殊意义
- 单下划线开头的标识符代表不能直接访问的类的属性,需要通过类提供的接口进行访问
- 以双下划线开头的标识符代表类的私有成员(如__foo)的标识符代表类的私有成员。
- 以双下划线开头和结尾的标识符代表Python里特殊方法的专用标识,如
__init__()
代表类的构造函数。
-
标识符禁止使用Python中的保留字
使用帮助
- 查看内置函数和类型的帮助信息
help(对象)
>>> help(max)
-
查看模块中的成员函数信息
>>> import os >>> help(os.fdopen)
-
查看整个模块的信息
>>> import math >>> help(math)
-
查看Python中所有模块的方法
>>> help("modules")
2.1 数据类型
2.1.1 整数
和数学上的写法一模一样,也可以用十六进制表示,python允许数字中间用_
分割,因此,写成10_000_000_000
和10000000000
是完全一样的。Python的整数没有大小限制
2.1.2 浮点数
对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代。Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf
(无限大)。
2.1.3 字符串
字符串是以单引号'
或双引号"
括起来的任意文本,比如'abc'
,"xyz"
等等。
如果字符串内部既包含'
又包含"
怎么办?可以用转义字符\
来标识,比如:
'I\'m \"OK\"!'
表示的字符串内容是:
I'm "OK"!
Python还允许用r''
表示''
内部的字符串默认不转义
如果字符串内部有很多换行,用\n
写在一行里不好阅读,为了简化,Python允许用'''...'''
的格式表示多行内容。
>>> print('''line1
... line2
... line3''')
line1
line2
line3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2NK7qhy-1685877744577)(C:\Users\17849\AppData\Roaming\Typora\typora-user-images\image-20230603181419866.png)]
2.1.4 布尔值
在Python中,可以直接用True
、False
表示布尔值(请注意大小写)
布尔值可以用and
、or
和not
运算。
and
运算是与运算,只有所有都为True
,and
运算结果才是True
:
>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True
or
运算是或运算,只要其中有一个为True
,or
运算结果就是True
:
>>> True or True
True
>>> True or False
True
>>> False or False
False
>>> 5 > 3 or 1 > 3
True
not
运算是非运算,它是一个单目运算符,把True
变成False
,False
变成True
:
>>> not True
False
>>> not False
True
>>> not 1 > 2
True
布尔值经常用在条件判断中,比如:
if age >= 18:
print('adult')
else:
print('teenager')
2.1.5 空值
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
2.1.6 常量
在Python中,通常用全部大写的变量名表示常量。
2.1.7 变量
Python中,允许多个变量指向同一个值,id()
函数用于查看对象的内存地址
>>> x = 3
>>> id(x)
>> y = x
>>> id(y) #可以看出这两个变量指向的地址相同
Python还是一种动态类型语言,变量的类型也是可以随时变化的。type()
函数用来查看变量类型
>>> x = 3
>>> print(type(x))
#<class 'int'>
isinstance(obj, class_or_tuple, /)
测试对象是否是某个类型的实例
>>> isinstance(3,int)
#True
最简单的变量赋值就是把一个变量值赋给一个变量名,只需要用等号(=)就可以实现。同时Python还可以将一个值同时赋给多个变量。
>>> a = b = c = 1
>>> a
#1
>> b
#1
>> c
#1
>>> a,b,c = 1,2,"abc"
>>> a
#1
>>> b
#2
>>> c
#'abc'
2.1.8 除法
在Python中,有两种除法,一种除法是/
:
>>> 10 / 3
3.3333333333333335
/
除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
>>> 9 / 3
3.0
还有一种除法是//
,称为地板除,两个整数的除法仍然是整数:
>>> 10 // 3
3
你没有看错,整数的地板除//
永远是整数,即使除不尽。要做精确的除法,使用/
就可以。
因为**//
除法只取结果的整数部分**,所以Python还提供一个余数运算,可以得到两个整数相除的余数:
>>> 10 % 3
1
无论整数做//
除法还是取余数,结果永远是整数,所以,整数运算结果永远是精确的
2.2 字符串
对于单个字符的编码,Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
如果知道字符的整数编码,还可以用十六进制这么写str
:
>>> '\u4e2d\u6587'
'中文'
两种写法完全是等价的。
要计算str
包含多少个字符,可以用len()
函数:
>>> len('ABC')
3
>>> len('中文')
2
2.3 格式化
在Python中,采用的格式化方式和C语言是一致的,用%
实现,举例如下:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
%
运算符就是用来格式化字符串的。在字符串内部,%s
表示用字符串替换,%d
表示用整数替换,有几个%?
占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?
,括号可以省略。
2.4 format
format()
方法,它会用传入的参数依次替换字符串内的占位符{0}
、{1}
…….
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62
上述代码中,{r}
被变量r
的值替换,{s:.2f}
被变量s
的值替换,并且:
后面的.2f
指定了格式化参数(即保留两位小数),因此,{s:.2f}
的替换结果是19.62
。
格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
- 语法:通过{}来代替%。
print(‘{} a word she can get what she {} for.’.format(‘With’,‘came’))
- 通过关键字参数
print(‘{pre} a word she can get what she {verb} for.’.format(pre=‘With’,verb=‘came’))
- 映射:通过位置
print(‘{0} a word she can get what she {1} for.’.format(‘With’,‘came’))
- 通过下标索引
p = [‘With’,‘came’]
print(‘{0[0]} a word she can get what she {0[1]} for.’.format§)
相当于print(p[0]+’ ‘+‘a word she can get what she’+’ ‘+p[1]+’ '+‘for.’)
- 通过赋值
city = input(‘write down the name of city:’)
url =‘http://apistore.baidu.com/microservice/weather?citypinyin={}’.format(city)
字符类型字符串格式化
- 精度常跟类型f一起使用
>>> '{:.2f}'.format(321.33345)
#'321.33'
- 用,号还能用来做金额的千位分隔符
>>> '{:,}'.format(1234567890)
#'1,234,567,890'
- 进制转换,b、d、o、x 分别是二进制、十进制、八进制、十六进制
>>> '{:b}'.format(17)
#'10001'
>>> '{:d}'.format(17)
#'17'
2.5 条件判断
Python条件判断格式如下
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
2.6 循环
Python循环格式如下
for 取值 in 序列或迭代对象:
循环体
[else:
else 子句代码块]
for…in循环,例子如下:
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
执行这段代码,会依次打印names
的每一个元素:
Michael
Bob
Tracy
所以for x in ...
循环就是把每个元素代入变量x
,然后执行缩进块的语句。
while循环,例子如下
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
在循环内部变量n
不断自减,直到变为-1
时,不再满足while条件,循环退出。
break
在循环中,break
语句可以提前退出循环
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束当前循环
print(n)
n = n + 1
print('END')
continue
在循环过程中,也可以通过continue
语句,跳过当前的这次循环,直接开始下一次循环。
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
break
和continue
会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break
和continue
语句。
如果出现死循环可以用ctrl+c
退出程序。
range()
range()
函数可以生成一个整数序列
语法格式为range([start,] end [, step] )
有range(stop)
、range(start, stop)
和range(start, stop, step)
三种用法。
参数start默认为0,step默认为1。
range() 函数返回具有惰性求值特点的range对象,其中包含左闭右开区间[start,end)内以step为步长的整数。
>>> range(5) #参数start默认为0,step默认为1。
#range(0,5)
>>> list(range(5))
# [0,1,2,3,4]
>>> list(range(1,10,2)) #指定起始值和步长
# [1,3,5,7,9]
>>> list(range(9,0,-2)) #步长为负数时,start应比end大
[9,7,5,3,1]
3 序列数据结构
3.1 list
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
创建一个list,只要把逗号分隔的不同数据项使用方括号括起来即可。
在非尾部位置插入和删除元素时会改变该位置后面的元素在列表中的索引,这对于某些操作可能会导致意外的错误结果。尽量从列表尾部进行元素的追加与删除操作。
同一个列表中元素的数据类型可以各不相同,可以同时包含整数、实数、字符串等基本类型的元素,也可以包含列表、元组、字典、集合、函数以及其他任意对象。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZTyyGKQ-1685877744586)(C:\Users\17849\AppData\Roaming\Typora\typora-user-images\image-20230603190332442.png)]
比如,列出班里所有同学的名字,就可以用一个list表示:
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
# ['Michael', 'Bob', 'Tracy']
- 用
len()
函数可以获得list元素的个数:
>>> len(classmates)
# 3
- 使用
count()
函数获取计数
>>> all_list = [1,'word',{'like':'pythom'},True,[1,2]]
>>> all_list.count('word')
#1
- 使用
index()
获取下标
>>> all_list = [1,'word',{'like':'pythom'},True,[1,2]]
>>> all_list.index('word')
#1
- 使用
reverse()
反转list
>>> all_list = [1,'word',{'like':'pythom'},True,[1,2]]
>>> all_list.reverse()
#[[1, 2], True, {'like': 'pythom'}, 'word', 1]
- 也可以使用
all_list[::-1]
控制台会直接输出结果
>>> all_list[::-1]
#[[1, 2], True, {'like': 'pythom'}, 'word', 1]
- 使用
+
来合并list
>>> list1 =[1]
>>> list2 = [2]
>>> list1+list2
# [1, 2]
- 使用
*
来重复list
>> list1*3
# [1, 1, 1]
- 使用
in
来判断元素是否存在
>>> 'word' in list1
# False
- 使用索引来访问list中每一个位置的元素,索引是从
0
开始的:
>>> classmates[0]
# 'Michael'
>>> classmates[1]
# 'Bob'
>>> classmates[2]
# 'Tracy'
>>> classmates[3] //索引下标越界会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
- 如果要取最后一个元素,除了计算索引位置外,还可以用
-1
做索引,直接获取最后一个元素:
>>> classmates[-1]
# 'Tracy'
以此类推,可以获取倒数第2个、倒数第3个:
>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
>>> classmates[-4] //倒数第四个超出索引,导致越界
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
- 使用
insert()
把元素插入到指定的位置,比如索引号为1
的位置:
>>> classmates.insert(1, 'Jack')
>>> classmates
# ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
- 使用
append()
方法在列表末尾添加元素
>>> list1 = ['china','abc',2003,'月份']
>>> list1.append('你好')
# ['china', 'abc', 2003, '月份', '你好']
- 使用
pop()
方法删除list末尾的元素,并会打印出删除的元素:
>>> classmates.pop()
'Adam'
>>> classmates
# ['Michael', 'Jack', 'Bob', 'Tracy']
- 使用
pop(i)
方法,删除指定位置的元素,其中i
是索引位置,并会打印出删除的元素:
>>> classmates.pop(1)
'Jack'
>>> classmates
# ['Michael', 'Bob', 'Tracy']
- 使用
del
语句删除列表的元素
>>> list1 = ['china','abc',2003,'月份']
>>> del list1[1]
#['china', 2003, '月份']
- 使用
remove()
方法删除列表的元素
>>> list1 = ['china','abc',2003,'月份']
>>> list1.remove(2003)
# ['china', 'abc', '月份']
- 要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> classmates[1] = 'Sarah'
>>> classmates
# ['Michael', 'Sarah', 'Tracy']
- list里面的元素的数据类型也可以不同,比如:
>>> L = ['Apple', 123, True]
- list元素也可以是另一个list,比如:
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
# 4
- 要注意
s
只有4个元素,其中s[2]
又是一个list,如果拆开写就更容易理解了:
>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']
- 要拿到
'php'
可以写p[1]
或者s[2][1]
,因此s
可以看成是一个二维数组
定义多维列表格式:
列表名[索引1][索引2]
- 如果一个list中一个元素也没有,就是一个空的list,它的长度为0:
>>> L = []
>>> len(L)
# 0
3.2 tuple
实际生活中很多数据(如:历史数据、统计数据)都是不可变的,这些数据都是服务于用户的,用户只需进行查询操作,不需要或不允许进行增删改操作,所以引入了元组这种数据结构。
tuple和list非常类似,但是tuple一旦初始化就不能修改,元组使用圆括号(),列表使用方括号[]。元组中的数据类型也可以不相同
>>> classmates = ('Michael', 'Bob', 'Tracy')
tuple没有append(),insert()这样的方法。获取元素的方法和list一样,你可以正常地使用classmates[0]
,classmates[-1]
,但不能赋值成另外的元素。
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:
>>> t = (1, 2)
>>> t
# (1, 2)
- 如果要定义一个空的tuple,可以写成
()
:
>>> t = ()
>>> t
# ()
- 只有1个元素的tuple定义时必须加一个逗号
,
,来消除歧义:
>>> t = (1,)
>>> t
# (1,)
- 虽然元组中的元素值不允许修改,但是可以使用
+
来进行连接组合
>>> tup1=(13,22,56)
>>> tup2=(14,25,75)
>>> tup3 = tup1+tup2
# (13, 22, 56, 14, 25, 75)
- 元组中的元素值是不允许删除的,但是可以使用
del
语句来删除整个元组
>>> tup1=(13,22,56)
>>> del tup1
>>> print(tup1)
# NameError:name'tup1' is not defined
Python在显示只有1个元素的tuple时,也会加一个逗号,
,以免你误解成数学计算意义上的括号。
最后来看一个“可变的”tuple:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
# ('a', 'b', ['X', 'Y'])
这里看似是tuple发生了变化,其实不然,实际上是list发生了改变。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。
3.3 tuple与list
-
列表和元组都属于有序序列
-
都支持切片操作
-
都可使用双向索引访问其中的元素,以及使用count()方法统计指定元素的出现次数和index()方法获取指定元素的索引
-
len()、map()、filter()等大量内置函数和+、+=、in等运算符也都可以作用于列表和元组。
-
元组属于不可变(immutable)序列,不可以直接修改元组中元素的值,也无法为元组增加或删除元素。
-
元组没有提供append()、extend()和insert()等方法,无法向元组中添加元素;
-
同样,元组也没有remove()和pop()方法,也不支持对元组元素进行del操作,不能从元组中删除元素,而只能使用del命令删除元组。
-
元组访问速度快,安全级别高
3.4 dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
dict的内部实现是基于二叉树(Binary Tree)的,数据没有严格的顺序。字典将键映射到值,通过键来调取数据。如果键值本来是有序的,那么我们不应该使用字典。
定义dict时,每个元素的“键”和“值”之间用冒号分隔称为键值对项(item),不同元素之间用逗号分隔,所有的元素放在一对大括号{}
中。
不能使用列表、集合、字典或其他可变类型作为字典的“键”。另外,字典中的“键”不允许重复,如果同一个键被赋值两次后,后一个值会覆盖前一个值。而且字典中的键必须是不可变类型,例如:字符串,数字或元组。字典值可以是任何Python对象,“值”是可以重复的。
- 创建一个空dict
>>> x={}
- 利用字典内建函数创建dict
>>> aDict = dict.fromkeys(['name','age','sex'])
# {'name': None, 'age': None, 'sex': None}
- 使用内置类dict以不同形式创建字典
>>> x = dict(name='Dong',age=39)
# {'name': 'Dong', 'age': 39}
#将列表中的元组转换为字典
>>> code =dict([('BIDU','Baidu'),('SINA','Sina'),('YOKU','Youku')])
# {'BIDU': 'Baidu', 'SINA': 'Sina', 'YOKU': 'Youku'}
#根据已有数据创建字典
>>> keys=['a','b','c','d']
>>> values=[1,2,3,4]
>>> Adict = dict(zip(keys,values)) #像拉链一样把key和values进行配对
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
假设要根据同学的名字查找对应的成绩,用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
# 95
- 把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
>>> d['Adam'] = 67
>>> d['Adam']
# 67
- 使用
get()
方法返回指定键对应的值吗,如果key不存在,可以返回None
,或者自己指定的value:
>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong'}
>>> aDict.get('age') #如果存在则返回对应的值
# 39
>>> aDict.get('addr','Not Exists') #指定的键不存在时返回指定默认值
# 'Not Exists'
注意:返回None
的时候Python的交互环境不显示结果。
- 一个key只能对应一个value,如果多次对一个key放入value,前面的值会代替后面的值
>>> d['Jack'] = 90
>>> d['Jack']
# 90
>>> d['Jack'] = 88
>>> d['Jack']
# 88
- 通过
in
判断key是否存在
>>> 'Thomas' in d
# False
- 删除一个key可以使用
pop(key)
方法,对应的value也可以从dict中删除.会打印出被删除的key值
>>> d.pop('Bob')
# 75
>>> d
# {'Michael': 95, 'Tracy': 85}
- 使用
del()
删除字典键对应的数据值
>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong'}
>>> del aDict['age'] #删除键是age的元素
# {'score': [98, 97], 'name': 'Dong'}
>>> del aDict #删除字典
# name 'aDict' is not defined
- 使用
keys()
可以返回字典中所有键的信息
>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong'}
>>> aDict.keys()
#dict_keys(['age', 'score', 'name'])
- 使用
values()
可以返回字典中所有值的信息
>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong'}
>>> aDict.values()
# dict_values([39, [98, 97], 'Dong'
- 使用
items()
可以返回字典中所有键值对的信息
>>> aDict = {'name':'张三','age':23,'class':'计算机一班'}
>>> for key,value in Adict.items():
print(key,value)
# a 1
# b 2
# c 3
# d 4
dict内部存放的顺序和key放入的顺序是没有关系的。
3.5 dict与list
dict有以下特点
- 查找和插入的速度极快,不会随着key的增加而变慢
- 需要占用大量内存,内存浪费多
list有以下特点
- 查找和插入的时间随着元素的增加而增加
- 占用空间小,浪费内存很少
所以dict是用空间换取时间的一种方法,需要牢记dict的key必须是不可变对象。
3.6 set
set和dict类似,也是一组key的集合,但不存储value。set也不是有序的,同一个set内的每个元素都是唯一的,元素之间不允许重复。
set中只能包含数字、字符串、元组等不可变类型的数据,而不能包含列表、字典、集合等可变类型的数据。
可以使用花括号{}或者set()函数创造集合。
**注意一个空集合必须用set()
**而不是{}
,因为用{}
来创建一个空dict
- 创建set,使用函数set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合
>>> s = set([1, 2, 3])
>>> s
# {1, 2, 3}
- 也可以直接将集合赋值给变量
>>> a = {3,5}
>>> type(a)
# <class 'set'>
- 创建一个空集合
>>> x = set()
- 重复的元素会被set自动过滤
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
# {1, 2, 3}
- 通过
add(key)
方法可以添加元素到set中,自动忽略重复的元素
>>> s.add(4)
>>> s
# {1, 2, 3, 4}
>>> s.add(4)
>>> s
# {1, 2, 3, 4}
update()
方法用于合并另外一个集合中的元素到当前集合中,并自动去除重复元素。
>>> s = {1, 2, 3}
>>> s.update({3,4})
>>> s
# {1, 2, 3, 4}
- 通过
remove(key)
方法可以删除元素:
>>> s.remove(4)
>>> s
# {1, 2, 3}
pop()
方法用于随机删除并返回集合中的一个元素,如果集合为空则抛出异常;
-
如果集合里都是数字,删除的是最小的数字,其他升序排序
-
如果集合里都是非数字,删除的是随机的元素,其他随机排列
-
如果集合里既有数字也有非数字
-
如果删除的数字,则一定是删除了最小的,数字元素升序排列,非数字随机排列
-
如果删除的是非数字,则一定是随机删除,排序方法和上面相同
-
>>> s = {3,2,1}
>>> s.pop()
# 删除的元素是1
# {2, 3}
>>> s= {'abc','c','d'}
>>> s.pop()
#删除的是abc
# {'c', 'd'}
>>> s={'abc',4,9,2}
>>> s.pop()
# 运行结果不唯一
discard()
用于从set中删除一个特定元素,如果不存在则忽略该操作
>>> s = {1,2,3,4}
>>> s.discard(5)
# {1,2,3,4}
>>> s = {1,2,3,4}
>>> s.discard(2)
# {1, 3, 4}
clear()
方法清空集合
>>> s = {1,2,3,4}
>>> s.clear()
#set()
- set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
# {2, 3}
>>> s1 | s2
# {1, 2, 3, 4}
>>> s2-s1 #取一个集合中另外一个集合没有的元素
# {4}
>>> s1^s2 #取集合s1和s2中不属于s1&s2的元素
# {1, 4}
set和dict的唯一区别仅在于没有存储对应的value,set也不可以放入可变对象。
使用key-value存储结构的dict在Python中非常有用,选择不可变对象作为key很重要,最常用的key是字符串。
3.7 sort 与 sorted
-
sort 是应用在 list 上的方法,sorted可以对所有可迭代的对象进行排序操作
-
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值。
-
sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。