1.3 数据类型
除了上节所介绍的比较简单的数据类型,Python 中可以通过组合一些值,来得到多种复合数据类型。其中最常用的是列表 (list)、字典 (dictionary)、元组 (tuple)。
列表 (list) 介绍
列表 是 Python 中使用最频繁的数据类型。
- Python 的列表如同 Perl 中的数组,在 Python 中,变量可以任意取名,并且 Python 在内部会记录下其数据类型。
- Python 的列表更像 Java 中的数组,一个更好的类比是 ArrayList 类,它可以保存任意对象,并且可以在增加新元素时动态扩展。
- 可以通过方括号括起、逗号分隔的一组值(元素)得到列表,一个列表可以包含不同类型的元素,但通常使用时各个元素类型相同。
- 列表也支持索引和切片。
>>> list1 = [1, 4, 9, 16, "Hello"]
>>> list1
[1, 4, 9, 16, 'Hello']
>>> list1[0]
1
>>> list1[-3:]
[9, 16, 'Hello']
根据 Python 官方说明,所有的切片操作都返回一个新列表,这个新列表包含所需要的元素,这个新列表是一个新的浅拷贝。此外根据刚才的操作,与不可修改 (immutable) 的字符串不同, 列表是一个 可修改 (mutable) 类型,就是说,它自己的内容可以改变。
>>> list1 = [1, 4, 9, 16, 25]
>>> list2 = list1[:] # 浅拷贝
>>> list3 = list1 # 赋值
>>> print(id(list1),id(list2), id(list3))
2079473658304 2079473657856 2079473658304
>>> list2[0] = 30
列表常用的操作
- append(obj):来添加新元素。
- extend(obj):扩展新元素。
- remove(obj):移除列表中某个值的第一匹配项。
- insert(index, obj):用于将指定对象插入列表的指定位置。
- pop(index): 要移除列表中对下标对应的元素。
- sort():对列表进行排序。
- reverse():反向列表中元素。
>>> list1 = [1, 4, 9, 16, 25]
>>> list1.append([1,3,5])
>>> list1
[1, 4, 9, 16, 25, [1, 3, 5]]
>>> list1.extend([1,3,5]) # 会将数组展开为一串数字
>>> list1
[1, 4, 9, 16, 25, [1, 3, 5], 1, 3, 5]
>>> list1.remove([1,3,5])
>>> list1
[1, 4, 9, 16, 25, 1, 3, 5]
>>> list1 = list1[:5]
>>> list1.insert(1,4)
>>> list1
[1, 4, 4, 9, 16, 25]
>>> list1.pop(1)
4
>>> list1
[1, 9, 16, 25, 36]
>>> list1.reverse()
>>> list1
[36, 25, 16, 9, 1]
>>> list1.sort()
>>> list1
[1, 9, 16, 25, 36]
字典 (Dictionary) 介绍
字典是 Python 的内置数据类型之一,它定义了键和值之间一对一的关系。
- Python 中的字典像 Perl 中的 hash (哈希数组)。
- Python 中的字典像 Java 中的 Hashtable 类的实例。
- Python 中的字典像 Visual Basic 中的 Scripting.Dictionary 对象的实例。
- 每一个元素都是一个键和值对 (key-value pair),整个元素集合用大括号括起来。
- 可以通过键来引用其值,使用方括号,但是不能通过值获取键。
- 字典的键是大小写敏感的
>>> # 字典有三种赋值方法蓊
>>> dic = {"program":"Python", "database":"mysql"}
>>> dic = dict(program = "Python", database = "mysql")
>>> dic = dict([("program","Python"), ("database","mysql")])
>>> dic
{'program': 'Python', 'database': 'mysql'}
>>> dic["program"]
'Python'
>>> dic["Python"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Python'
>>> dic["Program"] = "Java"
>>> dic
{'program': 'Python', 'database': 'mysql', 'Program': 'Java'}
字典的常用操作
- copy():拷贝数据(浅拷贝)。
- keys():取得所有键。
- values():取得所有值。
- items():取得所有元素。
- clear():清空字典内元素。
- del()内建函数:可以删除特定元素或整个字典。
>>> dic = {"program":"Python", "database":"mysql"}
>>> dic2 = dic.copy()
>>> print(id(dic),id(dic2))
2079473853760 2079468906240
>>> dic.keys()
dict_keys(['program', 'database'])
>>> dic.values()
dict_values(['Python', 'mysql'])
>>> dic.items()
dict_items([('program', 'Python'), ('database', 'mysql')])
>>> del(dic["program"])
>>> dic
{'database': 'mysql'}
>>> dic.clear()
>>> dic
{}
元组 (Tuple) 介绍
- 元组是不可变的列表。一旦创建了一个元组,就不能以任何方式改变它。
- 定义元组与定义列表的方式相同,但整个元素集是用小括号包围的,而不是方括号。
- 元组的元素与列表一样按定义的次序进行排序。元组的索引与列表一样从 0 开始,所以一个非空元组的第一个元素总是 t[0]。
- 负数索引与列表一样从元组的尾部开始计数。
- 与列表一样分片 (slice) 也可以使用,当分割一个元组时,会得到一个新的元组。
- 元组可以转换成列表,反之亦然。
- 元组没有方法可以操作。
>>> t = (1, "mysql", "Python")
>>> t
(1, 'mysql', 'Python')
>>> t[0]
1
>>> t[-1]
'Python'
>>> t[1:3]
('mysql', 'Python')
那么使用元组有什么好处呢?
- 元组比列表操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用元组代替列表。
- 如果对不需要修改的数据进行 “写保护”,可以使代码更安全,说明这一数据是常量。
- 字典的键可以是字符串,整数、字串符或是元组。元组可以在字典中被用做键,但是列表不行。
- 元组可以用在字符串格式化中。