Python 的数据类型有以下几种,数值类型这里就不再介绍了,本章主要介绍 List、Tuple、Dictionary、Set。
List 是一种有序的集合,可以随时添加和删除其中的元素。
定义 List 只需要将元素用 [ ]
包含进来即可,元素之间用 ,
分割。
1 | classmates = ['Michael', 'Bob', 'Tracy'] |
---|
由于Python是动态语言,所以 List 中包含的元素并不要求都必须是同一种数据类型,我们完全可以在 List 中包含各种数据:
1 | L = ['Michael', 100, True] |
---|
List 可以通过索引来获取指定元素。索引从 0 开始。
123456 | # coding=utf-8classmates = ['Michael', 'Bob', 'Tracy']i = 0while i < len(classmates): print("索引为 %d 的元素为:%s"%(i,classmates[i])) i+=1 |
---|
使用 append()
和 insert()
方法都可以将元素添加进去,一个是添加到 List 的末尾,一个是插入到指定位置。
12345678 | # coding=utf-8A = ["A", "B", "C"]A.append("D") # 向末尾添加一个元素 Dprint AA.insert(0, "A") # 向第 0 个位置插入一个元素 Aprint A |
---|
使用 pop()
方法可以将 List 中的元素删除。
12345678 | # coding=utf-8A = ["A", "B", "C", "D"]A.pop() # 删除末尾的一个元素print AA.pop(0) # 删除索引为 0 的元素print A |
---|
Tuple 是另一种有序的列表,中文翻译为“ 元组 ”。Tuple 和 List 非常类似,但是,Tuple一旦创建完毕,就不能修改了。
创建tuple和创建list唯一不同之处是用 ( )
替代了 [ ]
。
1 | t = ('Adam', 'Lisa', 'Bart') |
---|
现在,这个 t 就不能改变了,tuple没有 append()
方法,也没有 insert()
和 pop()
方法。
获取 tuple 元素的方式和 list 是一模一样的,也是使用索引来获取元素的。
tuple 创建时也可以省略 [ ]
:t = 1, 2, 3
,这样也是定义一个 tuple。
虽然 Tuple 的是不可变的,但我们可以用特殊的方法来创建一个 “可变” 的 Tuple。
123456789 | L = ['A', 'B']T = ['a', 'b', L]print TL[0] = 'X'L[1] = 'Y'print T |
---|
运行结果:
['a', 'b', ['A', 'B']]
['a', 'b', ['X', 'Y']]
不是说 Tuple 一旦定义后就不可变了吗?怎么现在又变了?
别急,我们先看看定义的时候 Tuple 包含的 3 个元素:
当我们把 List 的元素 ‘A’ 和 ‘B’ 修改为 ‘X’ 和 ‘Y’ 后,Tuple 变为:
表面上看,Tuple 的元素确实变了,但其实变的不是 Tuple 的元素,而是 List 的元素。
Tuple 一开始指向的 List 并没有改成别的 List,所以,Tuple所谓的“不变”是说,Tuple的每个元素,指向永远不变。即指向 ‘a’,就不能改成指向 ‘b’,指向一个 List,就不能改成指向其他对象,但指向的这个 List 本身是可变的!
用 List 和 Tuple 可以用来表示顺序集合,例如,班里同学的名称:
1 | L = ['Adam', 'Lisa', 'Bart'] |
---|
或者考试的成绩列表:
1 | L = [95, 85, 59] |
---|
但是,要根据名字找到对应的成绩,就没办法表示了。所以就用到了 Dict,中文叫做字典:
12345 | d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59} |
---|
花括号 { }
表示这是一个 Dict,然后按照 key: value,
写出来即可。最后一个 key: value
的逗号可以省略。
可以简单地使用 d[key]
的形式来查找对应的 value:
12345678 | d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print d['Adam']print d['Lisa']print d['Bart'] |
---|
注意:通过 key
访问 Dict 的 value
,只要 key 存在,Dict 就返回对应的 Value。如果 key 不存在,会直接报错:KeyError
。
为了避免 KeyError 发生,有两个办法:
'Paul' in d
,’Paul’ 不存在,则返回 False,存在返回 True。d.get("Paul")
,在 Key 不存在的时候,返回 None
。添加
和 修改
在这里归类为更新。
1234567 | d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print d{'Lisa': 85, 'Adam': 95, 'Bart': 59} |
---|
添加一条信息:
1 | d['Paul'] = 72 |
---|
在看看 dict 的内容:
12 | print d{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59} |
---|
如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value,也就是修改元素了:
12345678910 | d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print d# result:{'Lisa': 85, 'Adam': 95, 'Bart': 59}d['Lisa'] = 90print d# result:{'Lisa': 90, 'Adam': 95, 'Bart': 59} |
---|
1234567891011121314 | # coding=utf-8d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}print dd.pop('Lisa') # 删除给定键对应的值print dd.popitem() #随机删除字典内容print dd.clear() # 清空字典内容print d |
---|
运行结果:
{'Lisa': 85, 'Adam': 95, 'Bart': 59}
{'Adam': 95, 'Bart': 59}
{'Bart': 59}
{}
1234567891011121314 | # coding=utf-8d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}for key in d: print key, ':', d[key]print("---------")for key,val in d.items(): print key, ':', val |
---|
key-value
是没有顺序的。有时候,我们只想要保证元素不重复,但是用 Dict 的键值对形式又没必要,所以就有了 Set。
创建 Set 的方式是调用 set()
并传入一个 List,List 的元素将作为 Set 的元素:
123 | s = set(['A', 'B', 'C', 'C'])print s# result : set(['A', 'C', 'B']) |
---|
由此可以看出 Set 是无序的,且不允许重复,传入的重复元素会被自动去除。
添加元素时,使用 set 的 add()
方法:
1234 | s = set([1, 2, 3])s.add(4)print s# result : set([1, 2, 3, 4]) |
---|
如果添加的元素已经存在于set中,add()
不会报错,但是不会加进去了:
删除 set 中的元素时,用 set 的 remove()
方法:
1234 | s = set([1, 2, 3, 4])s.remove(4)print s# result : set([1, 2, 3]) |
---|
如果删除的元素不存在 set 中,remove()
会报错:
1234567 | s = set([1, 2, 3])s.remove(4)## Error Message:Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: 4 |
---|
所以 remove()
之前最好判断一下。
123 | s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])for x in s: print x[0] + ':',x[1] |
---|
输出结果:
Lisa: 85
Adam: 95
Bart: 59
Python 很强大,关于一些特殊的数据类型还有运算符:
运算符 | Python 表达式 | 结果 | 描述 | 支持的数据类型 |
---|---|---|---|---|
+ | [1, 2] + [3, 4] | [1, 2, 3, 4] | 合并 | 字符串、列表、元组 |
* | ‘Hi!’ * 4 | [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] | 复制 | 字符串、列表、元组 |
in | 3 in (1, 2, 3) | True | 元素是否存在 | 字符串、列表、元组、字典、集合 |
not in | 4 not in (1, 2, 3) | True | 元素是否不存在 | 字符串、列表、元组、字典 、集合 |
Python 中还有很多内置的函数,这里我们介绍一些常用的关于基本数据类型的内置函数:
序号 | 方法 | 描述 |
---|---|---|
1 | cmp(item1, item2) | 比较两个值 |
2 | len(item) | 计算容器中元素个数 |
3 | max(item) | 返回容器中元素最大值 |
4 | min(item) | 返回容器中元素最小值 |
5 | del(item) | 删除变量 |
可变类型,值可以改变:
不可变类型,值不可以改变:
关于 Pyhton 中函数传递参数的问题,Python 中有可变类型
和不可变类型
,在参数传递的时候分为两种情况:
我们可以用
id()
来判断两个变量是否为同一个值的引用。 我们可以将 id 值理解为那块内存的地址标示。 1 2 3 4 5 6 7 8 9 10 11>>> a = 1 >>> b = a >>> id(a) 13033816 >>> id(b) # 注意两个变量的id值相同 13033816 >>> a = 2 >>> id(a) # 注意a的id值已经变了 13033792 >>> id(b) # b的id值依旧 13033816