dict字典
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
定义
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中
用Python写一个dict如下:
1 | d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} |
这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。
创建
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
1 | d['Adam'] = 67 |
字典的方法
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
1 | d['Jack'] = 90 |
如果key不存在,dict就会报错:
1 | d['Thomas'] |
要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
1 | 'Thomas' in d |
二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
1 | d.get('Thomas') |
注意:返回None的时候 Python 的交互环境不显示结果。
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
1 | d.pop('Bob') |
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
Python字典包含了以下内置方法:
| 序号 | 函数及描述 |
|---|---|
| dict.clear() | 删除字典内所有元素 |
| dict.copy() | 返回一个字典的浅复制 |
| dict.fromkeys(seq[, val]) | 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
| dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
| dict.has_key(key) | 如果键在字典dict里返回true,否则返回false |
| dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
| dict.keys() | 以列表返回一个字典所有的键 |
| dict.values() | 以列表返回字典中的所有值 |
| pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
与list的比较
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
注意:dict的key必须是不可变对象。
在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
集合
特性
set和dict类似,也是一组key的集合,但不存储value。
由于key不能重复,所以,在set中,没有重复的key。
创建
要创建一个set,需要提供一个list作为输入集合:
1 | s = set([1, 2, 3]) |
注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。
重复元素在set中自动被过滤:
1 | s = set([1, 1, 2, 2, 3, 3]) |
方法
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:
1 | s.add(4) |
通过remove(key)方法可以删除元素:
1 | >>> s.remove(4) |
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
1 | s1 = set([1, 2, 3]) |
条件语句
Python 编程中 if 语句用于控制程序的执行,基本形式为:1
2
3
4if 判断条件:
执行语句……
else:
执行语句……
其中”判断条件”成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围。else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句。
if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。
当判断条件为多个值时,可以使用以下形式:1
2
3
4
5
6
7
8if 判断条件1:
执行语句1
elif 判断条件2:
执行语句2
elif 判断条件3:
执行语句3
else:
执行语句4
由于 python 不支持 switch 语句,所以多个条件判断,只能用 elif 来实现,如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功。
当if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外 and 和 or 的优先级低于>(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断。
三目表达式
Python语言不像Java、JavaScript等这些语言有类似:1
判段的条件?条件为真时的结果:条件为假时的结果
这样的三目运算,但是Python也有自己的三目运算符: 1
条件为真时的结果 if 判段的条件 else 条件为假时的结果
比如如下代码:1
2
3
4
5
6
7
8
9
10#一般的写法
if (x == y):
print("两数相同!")
elif(x > y):
print("较大的数为:",x)
else:
print("较大的数为:",y)
# 三目运算符写法
print(x if(x>y) else y)
循环语句
Python提供了for循环和while循环(在Python中没有do..while循环):
| 循环类型 | 描述 |
|---|---|
| while 循环 | 在给定的判断条件为 true 时执行循环体,否则退出循环体 |
| for 循环 | 重复执行语句 |
循环控制语句
循环控制语句可以更改语句执行的顺序。
Python支持以下循环控制语句:
| 控制语句 | 描述 |
|---|---|
| break 语句 | 在语句块执行过程中终止循环,并且跳出整个循环 |
| continue 语句 | 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环 |
| pass 语句 | pass是空语句,是为了保持程序结构的完整性 |
While 循环语句
基本形式为:1
2while 判断条件:
执行语句
执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假false时,循环结束。
循环使用 else 语句
在 python 中,while … else 在循环条件为 false 时执行 else 语句块:1
2
3
4
5
6
7
8
9
10
11
12
13count = 0
while(count) < 5:
print(count, " is less than 5")
count = count + 1
else:
print(count, " is not less than 5")
0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
for 循环语句
for循环的语法格式如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14for iterating_var in sequence:
statements(s)
```python
#### 通过序列索引迭代
```python
for index in range(5):
print(index)
0
1
2
3
4
循环使用 else 语句
在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行。
1 | for index in range(5): |