数据类型是指数据在计算机内部的表达和存储形式。根据性质和用途,数据被划分为多种不同的类型。Python基本数据类型包括数值型、字符串型、逻辑型等。此外,Python还有列表、元组、字典和集合等复合类型。
2.1.1 数值类型
数值型数据可以分为整型、实型和复数型。
整型数据
Python语言的整型数据即是有符号整数,不带小数点。在Python 3.x版本中,只要内存许可,整型数据的值可以扩展到任意长度,整数的取值范围几乎包括了全部整数,这给大数据的计算带来便利。Python语言中,整型常数有十进制、二进制、八进制、十六进制4种。不同进制的整型常量是根据前缀进行区分,因此,书写时,应注意前缀的正确性。
十进制整数没有前缀,如120、0、-375等。
二进制整数以0b或0B(数字0加字母b或B)开头,后接数字0,1的整数,如0b1001,其值等于十进制数9。
八进制整数以0o或0O(数字0加小写字母o或大写字母O)开头,后接数字0~7的整数,如0o127,其值等于十进制数87。
十六进制整数以0x或0X开头,后接09和AF(或用小写字母)字符的整数,如0xabc,其值等于十进制数2748。
实型数据
实型也称为浮点型,Python语言中,实数只采用十进制。它有两种表示形式:十进制形式和指数形式。
十进制数形式由数码0~9和小数点组成,如345.0、12.2、0.0等。实型数据允许小数点后面没有任何数字,表示小数部分为0,如23.表示23.0。
指数形式即由科学计数法表示的浮点数,由十进制数加阶码标志E或e组成。e之前为数字部分,之后为指数部分,且两部分必须同时出现,指数必须为整数。如45e-5,9.34e2等,分别代表45x10-5、9.34x102,而e4,3.4e3.4、34e等是非法的浮点型常量。
复数型数据
在科学计算问题中常会遇到复数运算问题。例如,数学中求方程的复根、电工学中交流电路的计算、自动控制系统中传递函数的计算等都用到复数运算。Python提供了复数类型,其数据形式为a+bJ。其中,a是复数的实部,b是复数的虚部,J表示-1的平方根(虚数单位)。J也可以写成小写j,注意不是数学上的i。示例代码:
>>>x = 12 + 34J
>>>x
(12 + 34j)
通过x.real和x.imag来分别获取复数x的实部和虚部,结果都是浮点型。接着上面的语句继续执行以下语句。示例代码:
>>>x.real
12.0
>>>x.imag
34.0
2.1.2 字符串类型
标准字符串
在Python中定义一个标准字符串可以使用英文半角的单引号、双引号和三引号(三个单引号或三个双引号)。例如,'abc'、"12345678"、"""Life is short,use python!"""都是字符串。示例代码:
>>>str1 = 'abc'
>>>str2 = "12345678"
>>>str3 = """Life is short,use python!"""
此外,三引号括起来的可以是多行字符串。示例代码:
>>>str4 = """
>>>Life is short,
>>>use Python
>>>"""
>>># 三个单引号和三个双引号效果等价
>>>str5 = '''
>>>Life is short,
>>>use Python
>>>'''
转义字符
转义字符是一种特殊的字符常量。转义字符以反斜杠“\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义字符”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符其意义如下表所示。
转义字符 | 转义字符的意义 |
---|---|
\n | 回车换行 |
\t | 横向跳到下一个制表位置 |
\ | 反斜线符() |
' | 单引号符 |
" | 双引号符 |
转义字符用法示例代码:
>>>print("**ab*c\t*de***\ttg**\n")
**ab*c *de*** tg**
>>>print("h\nn***k")
h
n***k
如果不想让反斜杠发生转义,可以在字符串前面添加一个r,表示原始字符串。示例代码:
>>>print('C:\some\name') # '\n'发生转义
C:\some
ame
>>>print(r'C:\some\name') # '\n'不发生转义
C:\some\name
2.1.3 逻辑型
逻辑型,又称布尔型(bool),它只有True(真)和False(假)两个值。值为真或假的表达式称为布尔表达式,Python的布尔表达式包括关系运算表达式和逻辑运算表达式。它们通常用来在程序中表示条件,条件满足时结果为True,不满足时结果为False。示例代码:
>>>x = 10
>>>x > x + 1
False
>>>x - 1 < x
True
2.1.4 复合数据类型
数值类型、布尔类型数据不可再分解为其他类型,而列表、元组、字典和集合类型的数据包含多个相互关联的数据元素,所以称它们为复合数据类型。字符串其实也是一种复合数据,其元素是单个字符。
字符串序列
列表、元组和字符串是有顺序的数据元素的集合体,称为序列(sequence)。序列具有顺序存取的特征,可以通过各数据元素在序列中的位置编号(索引)来访问数据元素。示例代码:
>>>str1 = 'This is an apple.'
>>>print(str1[0]) #输出字符串第1个字符,索引号以0开始
T
>>>print(str1[8:13]) #输出字符串第9到13个字符
an ap
字典和集合属于无顺序的数据集合体,数据元素没有特定的排列顺序,因此不能像序列那样通过位置编号来访问数据元素。
列表
列表(list)是用来处理一组有序项目的数据结构,可以完成大多数复合数据结构的操作。列表元素写在中括号之间、用逗号分隔,可以是数字、单个字符、字符串,也可以嵌套列表。示例代码:
>>>list1 = [1, 2, 3, 4, 5]
>>>list2 = ['a', 'abc', 4.5]
>>>list3 = [a, b, 2, [3, 4]]
与字符串不同,列表中的元素是可以改变的。示例代码:
>>>a = [1, 2, 3, 4, 5, 6]
>>>a[0] = 9
>>>a
[9, 2, 3, 4, 5, 6]
元组
元组(tuple)是写在小括号之间、用逗号隔开的元素序列。元组中的元素类型也可以不相同。元组与列表类似,不同之处在于元组的元素不能修改,相当于只读列表。示例代码:
>>>tuple1 = ('sunny', 23.3, 22, 'tom')
>>>tuple1
('sunny', 23.3, 22, 'tom')
>>>tuple1[2] #输出元组的第3个元素
22
要注意一些特殊元组的表示方法。空的圆括号表示空元组。当元组只有一个元素时,必须以逗号结尾。示例代码:
>>>() #空元组
>>>(9,) #含有一个元素的元组
>>>(9) #没有逗号结尾,表示整数9
任何一组以逗号分隔的对象,当省略括号时,默认为元组。示例代码:
>>>2, 3, 4
>>>s = 2, 3, 4
>>>s
(2, 3, 4)
与字符串类似,元组中的元素不能二次赋值。作为序列,列表与元组的主要区别表现在,列表元素用中括号[]括起来,且元素的个数及元素的值可以改变。元组元素用小括号()括起来,且不可以改变。其实,字符串可以看成是一种特殊的元组,而元组可以看成是只读的列表。
字典
字典(dictionary)是写在大括号之间、用逗号分隔的元素集合,其元素由关键字(key,也称为键)、冒号(:)和关键字对应的值(value)组成,通过关键字来存取的字典中的元素。
字典是无序的对象集合,是一种映射类型(mapping type),它是一个无序的“关键字:值”对的集合。在同一个字典中,关键字必须使用不可变类型,且满足唯一性。示例代码:
>>>dict = {'name':'Tom', 'id':12345, 'dept':'marketing'}
>>>dict
{'dept': 'marketing', 'id': 12345, 'name': 'Tom'}
>>>dict['name'] #输出关键字为name的值
'Tom'
>>>dict['salary'] = 4600 #在字典中添加一个“键:值”对元素
>>>dict
{'dept': 'marketing', 'id': 12345, 'name': 'Tom', 'salary': 4600}
集合
集合(set)是一个无序且包含不重复元素的数据类型。可以使用大括号或者set()函数创建集合类型,注意:创建一个空集合必须用set()而不是{},因为{}用来表示一个空字典。示例代码:
>>>student = {'Tom', 'Jim', 'Mike', 'Lily', 'Tom', 'tom', 'Lucy'}
#无序输出set集合中的所有元素,重复的元素被自动去掉,且区分大小写
>>>student
{'Jim', 'Lily', 'Lucy', 'Mike', 'Tom', 'tom'}