Python基础任务3

dict字典

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

定义

字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {}

用Python写一个dict如下:

1
2
3
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

创建

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

1
2
3
>>> d['Adam'] = 67
>>> d['Adam']
67

字典的方法

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉

1
2
3
4
5
6
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88

如果key不存在,dict就会报错:

1
2
3
4
>>> d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Thomas'

要避免key不存在的错误,有两种办法,一是通过in判断key是否存在

1
2
>>> 'Thomas' in d
False

二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

1
2
3
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

注意:返回None的时候 Python 的交互环境不显示结果。

删除一个key,用pop(key)方法,对应的value也会从dict中删除:

1
2
3
4
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

请务必注意,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有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法

注意:dict的key必须是不可变对象

在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

集合

特性

set和dict类似,也是一组key的集合,但不存储value

由于key不能重复,所以,在set中,没有重复的key

创建

创建一个set,需要提供一个list作为输入集合:

1
2
3
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的

重复元素在set中自动被过滤

1
2
3
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

方法

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

1
2
3
4
5
6
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通过remove(key)方法可以删除元素:

1
2
3
>>> s.remove(4)
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

1
2
3
4
5
6
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

条件语句

Python 编程中 if 语句用于控制程序的执行,基本形式为:

1
2
3
4
>>> if 判断条件:
执行语句……
else
执行语句……

其中”判断条件”成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围。else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句。

if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。

当判断条件为多个值时,可以使用以下形式:

1
2
3
4
5
6
7
8
>>> if 判断条件1:
执行语句1
elif 判断条件2:
执行语句2
elif 判断条件3:
执行语句3
else:
执行语句4

由于 python 不支持 switch 语句,所以多个条件判断,只能用 elif 来实现,如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功。

if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外 andor 的优先级低于>(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断。

三目表达式

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
2
>>> while 判断条件:
执行语句

执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假false时,循环结束。

循环使用 else 语句

在 python 中,while … else 在循环条件为 false 时执行 else 语句块:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> count = 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
14
>>> for 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
2
3
4
5
6
7
8
9
10
11
>>> for index in range(5):
print(index)
else:
print("end")

0
1
2
3
4
end
-------------本文结束感谢您的阅读-------------
您的支持将是我前进的动力!