文章目录
-
-
-
- 1、整数型
- 2、浮点数
- 3、字符串
- 4、布尔值
- 5、空值
- 6、变量
- 7、定义字符串
-
- (1)raw字符串 、多行字符串
- (2)Unicode字符串
- 8、集合 list
-
- (1)访问列表中的值
- (2)更新列表
- (3)删除列表元素
- (4)Python列表脚本操作符
- (6)嵌套列表
- (7)列表函数&方法
- 9、元组 tuple
-
- (1)访问元组
- (2)修改元组
- (3)删除元组
- (4)元组运算符
- (5)元组索引,截取
- (6)元组内置函数
- 10、字典
-
- (1)访问字典里的值
- (2)修改字典
- (3) 删除字典元素
- (4)字典键的特性
- (5)字典内置函数&方法
- 11、集合
-
- (1)添加元素
- (2)删除元素
- (3)计算集合元素个数
- (4)清空集合
- (5)判断元素是否在集合中存在
- (6)集合内置方法完整列表
-
-
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种
1、整数型
Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
2、浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23×109和12.3×108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23×10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
3、字符串
字符串是以’‘或””括起来的任意文本,比如’abc’,“xyz”等等。请注意,’’或””本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。
4、布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。
布尔值可以用and、or和not运算。
and运算是与运算,只有所有都为 True,and运算结果才是 True。
or运算是或运算,只要其中有一个为 True,or 运算结果就是 True。
not运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。
5、空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到
#encoding=utf-8
# 计算十进制整数 45678 和十六进制整数 0x12fd2 之和。
m = 45678+int(0x12fd2)
print(m)
# 请用字符串表示出Learn Python in imooc。
n = "Learn Python in imooc"
# 计算以下表达式的布尔值
print(100 < 99)
print(int(0xff)==255)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
6、变量
在Python中,变量的概念基本上和初中代数的方程变量是一致的。
例如,对于方程式 y=x*x ,x就是变量。当x=2时,计算结果是4,当x=5时,计算结果是25。
只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头。
在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。
静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释)
等差数列可以定义为每一项与它的前一项的差等于一个常数,可以用变量 x1 表示等差数列的第一项,用 d 表示公差,请计算数列
1 4 7 10 13 16 19 ...
前 100 项的和。
x1 = 1
d = 3
n = 100
x100 = x1+d*99
s = (2*x1+d*99)*50
print s
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
7、定义字符串
字符串可以用’‘或者”“括起来表示。
如果字符串本身包含 ’ 怎么办?比如我们要表示字符串 I’m OK ,这时,可以用” “括起来表示,类似的,如果字符串包含”,我们就可以用’ ‘括起来表示。
这个时候,就需要对字符串的某些特殊字符进行“转义”,Python字符串用 \ 进行转义。
s = "Python was started in 1989 by \"Guido\"."
print s
s = "Python is free and easy to learn."
print s
- 1
- 2
- 3
- 4
(1)raw字符串 、多行字符串
如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。
r'\(~_~)/ \(~_~)/'
- 1
但是r’…‘表示法不能表示多行字符串,也不能表示包含 ’ 和 ” 的字符串。
如果要表示多行字符串,可以用’’’…’’’表示.
还可以在多行字符串前面添加 r ,把这个多行字符串也变成一个raw字符串:
r'''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in imooc!'''
- 1
- 2
- 3
请把下面的字符串用r'''...'''的形式改写,并用print打印出来:
'\"To be, or not to be\": that is the question.\nWhether it\'s nobler in the mind to suffer.'
print (r'''"To be, or not to be": that is the question.
Whether it's nobler in the mind to suffer.''')
- 1
- 2
- 3
- 4
- 5
(2)Unicode字符串
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 – 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。
如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串’ABC’在Python内部都是ASCII编码的。
用多行Unicode字符串表示下面的唐诗并打印:
静夜思
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
print (u'''静夜思
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。 ''')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
8、集合 list
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 – 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可
list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。
构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list。由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型。
假设班里有3名同学:Adam,Lisa和Bart,他们的成绩分别是 95.5,85 和 59,请按照 名字, 分数, 名字, 分数... 的顺序按照分数从高到低用一个list表示,然后打印出来。
L = [{"Adam":95.5},{"Lisa":85},{"Bart":59}]
print(L)
- 1
- 2
- 3
(1)访问列表中的值
#!/usr/bin/python3
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print ("list1[0]: ", list1[0])
print ("list2[1:5]: ", list2[1:5])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
(2)更新列表
可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项
#!/usr/bin/python3
list = ['Google', 'Runoob', 1997, 2000]
print ("第三个元素为 : ", list[2])
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2])
- 1
- 2
- 3
- 4
- 5
(3)删除列表元素
#encoding=utf-8
L = [{"Adam":95.5},{"Lisa":85},{"Bart":59}]
print(L)
del L[2]
print(L)
- 1
- 2
- 3
- 4
- 5
(4)Python列表脚本操作符
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
Python 表达式 | 结果 | 描述 |
---|---|---|
len([1, 2, 3]) | 3 | 长度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 组合 |
[‘Hi!’] * 4 | [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] | 重复 |
3 in [1, 2, 3] | True | 元素是否存在于列表中 |
for x in [1, 2, 3]: print(x, end=” “) | 1 2 3 | 迭代 |
##### (5)Python列表截取与拼接 Python的列表截取与字符串操作类型
Python 表达式 | 结果 | 描述 |
---|---|---|
L[2] | ‘Taobao’ | 读取第三个元素 |
L[-2] | ‘Runoob’ | 从右侧开始读取倒数第二个元素: count from the right |
L[1:] | [‘Runoob’, ‘Taobao’] | 输出从第二个元素开始后的所有元素 |
#encoding=utf-8
l = ['Google', 'Runoob', 'Taobao']
print(l[2])
print(l[-2])
print(l[0:1])
print(l[1:])
Taobao
Runoob
['Google']
['Runoob', 'Taobao']
[Finished in 0.1s]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
(6)嵌套列表
使用嵌套列表即在列表里创建其它列表
l = ['Google', 'Runoob', 'Taobao']
m = [1,2,l]
print(m)
[1, 2, ['Google', 'Runoob', 'Taobao']]
- 1
- 2
- 3
- 4
(7)列表函数&方法
序号 | 函数 |
---|---|
1 | len(list) 列表元素个数 |
2 | max(list) 返回列表元素最大值 |
3 | min(list) 返回列表元素最小值 |
4 | list(seq) 将元组转换为列表 |
序号 | 方法 |
---|---|
1 | list.append(obj) 在列表末尾添加新的对象 |
2 | list.count(obj) 统计某个元素在列表中出现的次数 |
3 | list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
4 | list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 |
5 | list.insert(index, obj) 将对象插入列表 |
6 | list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
7 | list.remove(obj) 移除列表中某个值的第一个匹配项 |
8 | list.reverse() 反向列表中元素 |
9 | list.sort( key=None, reverse=False) 对原列表进行排序 |
10 | list.clear() 清空列表 |
11 | list.copy() 复制列表 |
假设新来一名学生Paul,Paul 同学的成绩比Bart好,但是比Lisa差,他应该排到第三名的位置,请用代码实现。
L = ['Adam', 'Lisa', 'Bart']
L.insert(2,'Paul')
print L
- 1
- 2
- 3
- 4
9、元组 tuple
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
#encoding=utf-8
tup = ('a','b')
tup1 = ('a')
tup2 = ('a',)
print(type(tup))
print(type(tup1))
print(type(tup2))
<class 'tuple'>
<class 'str'>
<class 'tuple'>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
(1)访问元组
元组可以使用下标索引来访问元组中的值:
#encoding=utf-8
tup = (('a','b',1),('t','23',12))
print(tup[0])
print(tup[1][2])
- 1
- 2
- 3
- 4
(2)修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2;
print (tup3)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(3)删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
tup = ('Google', 'Runoob', 1997, 2000)
print (tup)
del tup;
print ("删除后的元组 tup : ")
print (tup)
- 1
- 2
- 3
- 4
- 5
- 6
(4)元组运算符
与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组
Python 表达式 | 结果 | 描述 |
---|---|---|
len((1, 2, 3)) | 3 | 计算元素个数 |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接 |
(‘Hi!’,) * 4 | (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) | 复制 |
3 in (1, 2, 3) | True | 元素是否存在 |
for x in (1, 2, 3): print (x,) | 1 2 3 | 迭代 |
(5)元组索引,截取
因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素。
Python 表达式 | 结果 | 描述 |
---|---|---|
L[2] | ‘Runoob’ | 读取第三个元素 |
L[-2] | ‘Taobao’ | 反向读取;读取倒数第二个元素 |
L[1:] | (‘Taobao’, ‘Runoob’) | 截取元素,从第二个开始后的所有元素。 |
(6)元组内置函数
序号 | 方法及描述 | 实例 |
---|---|---|
1 | len(tuple) 计算元组元素个数。 |
>>> tuple1 = ('Google', 'Runoob', 'Taobao') >>> len(tuple1) 3 >>> |
2 | max(tuple) 返回元组中元素最大值。 |
>>> tuple2 = ('5', '4', '8') >>> max(tuple2) '8' >>> |
3 | min(tuple) 返回元组中元素最小值。 |
>>> tuple2 = ('5', '4', '8') >>> min(tuple2) '4' >>> |
4 | tuple(seq) 将列表转换为元组。 |
>>> list1= ['Google', 'Taobao', 'Runoob', 'Baidu'] >>> tuple1=tuple(list1) >>> tuple1 ('Google', 'Taobao', 'Runoob', 'Baidu') |
10、字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
- 1
(1)访问字典里的值
#encoding=utf-8
dict = {'name':'黄某人','age':23}
print(dict['name'])
print(dict['age'])
- 1
- 2
- 3
- 4
(2)修改字典
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对
dict = {'name':'黄某人','age':23}
dict['age']=24
print(dict['age'])
- 1
- 2
- 3
(3) 删除字典元素
能删单一的元素也能清空字典,清空只需一项操作。
显示删除一个字典用del命令
#encoding=utf-8
dict = {'name':'黄某人','age':23,'Class':'first'}
del dict['name'] # 删除键 'Name'
dict.clear() # 清空字典
del dict # 删除字典
- 1
- 2
- 3
- 4
- 5
(4)字典键的特性
字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
- 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住.
- 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
(5)字典内置函数&方法
序号 | 函数及描述 | 实例 |
---|---|---|
1 | len(dict) 计算字典元素个数,即键的总数。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> len(dict) 3 |
2 | str(dict) 输出字典,以可打印的字符串表示。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> str(dict) "{'Name': 'Runoob', 'Class': 'First', 'Age': 7}" |
3 | type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} >>> type(dict) <class 'dict'> |
序号 | 函数及描述 |
---|---|
1 | radiansdict.clear() 删除字典内所有元素 |
2 | radiansdict.copy() 返回一个字典的浅复制 |
3 | radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | key in dict 如果键在字典dict里返回true,否则返回false |
6 | radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | radiansdict.keys() 返回一个迭代器,可以使用 list() 来转换为列表 |
8 | radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | radiansdict.values() 返回一个迭代器,可以使用 list() 来转换为列表 |
11 | pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 随机返回并删除字典中的最后一对键和值。 |
11、集合
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
(1)添加元素
#encoding=utf-8
m = set(("Google", "Runoob", "Taobao"))
n = {"Google", "Runoob", "Taobao"}
m.add("Facebook")
n.add("Facebook")
print(m)
print(n)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
(2)删除元素
将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
#encoding=utf-8
m = set(("Google", "Runoob", "Taobao"))
n = {"Google", "Runoob", "Taobao"}
n.remove("Google")
m.remove("Google")
print(m)
print(n)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。
#encoding=utf-8
m = set(("Google", "Runoob", "Taobao"))
n = {"Google", "Runoob", "Taobao"}
n.discard("Google")
m.discard("Google")
print(m)
print(n)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
也可以设置随机删除集合中的一个元素
#encoding=utf-8
m = set(("Google", "Runoob", "Taobao"))
n = {"Google", "Runoob", "Taobao"}
n.pop()
m.pop()
print(m)
print(n)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
(3)计算集合元素个数
计算集合 s 元素个数。
#encoding=utf-8
m = set(("Google", "Runoob", "Taobao"))
n = {"Google", "Runoob", "Taobao"}
print(len(m))
print(len(n))
- 1
- 2
- 3
- 4
- 5
(4)清空集合
m = set(("Google", "Runoob", "Taobao"))
n = {"Google", "Runoob", "Taobao"}
m.clear()
n.clear()
print(m)
print(len(n))
- 1
- 2
- 3
- 4
- 5
- 6
(5)判断元素是否在集合中存在
判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
m = set(("Google", "Runoob", "Taobao"))
n = {"Google", "Runoob", "Taobao"}
print("Google" in m)
print("faceBook" in n)
- 1
- 2
- 3
- 4
(6)集合内置方法完整列表
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |