- 数据结构
- 元组
- 字典
- 循环
- while循环
- 循环控制 break 和 continue
- 嵌套循环
- 自定义函数
元组
- 元组与列表相似,是若干值组成的一个序列
- 元素中的值可以是任意数据类型
- 元组的一个重要特征是不可变的
- 元组的数据结构不需要改变,因而在内存使用和表现上,元组比列表更有效率
- 元组的元素不重复
# 列表
l = ['l','i','s','t']
type(l)
list
# 元组中的括号可以省略,但括号有助于快速识别元组
t = ('t','u','p','l','e')
type(t)
tuple
# 类型转换 tuple() 函数可以把其他数据类型转换为元组
print(tuple(l))
type(tuple(l))
('l', 'i', 's', 't')
tuple
索引和切片等列表操作 也可以适用在元组上
t[2:4]
('p', 'l')
元组里的元素不可修改
l[0] = 'L'
l
['L', 'i', 's', 't']
# 但是元组元素不可修改
t[0] = 'T'
t
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-035107ff84ae> in <module>()
1 # 但是元组元素不可修改
----> 2 t[0] = 'T'
3 t
TypeError: 'tuple' object does not support item assignment
字典
- 字典是无序的键值对集合
- 字典和列表相似,列表由整数作为索引,字典由key作为索引
- 字典和列表都可以通过[]进行选择,更新和删除
### 在一对一查找方面,字典比列表更方便高效
countries = ['spain', 'france', 'germany', 'italy'] #国家
capitals = ['madrid', 'paris', 'berlin', 'rome'] #首都
# 打印德国首都
ind_ger = countries.index('germany')
print(capitals[ind_ger])
berlin
# 用字典可以更好的实现这个功能
europe = {'spain':'madrid', 'france':'paris','germany':'berlin','italy':'rome'}
print(europe['germany'])
berlin
获取字典的keys 和 values
# 用keys方法 获取字典的索引
europe.keys()
dict_keys(['spain', 'france', 'germany', 'italy'])
# 用values方法获取字典的值
europe.values()
dict_values(['madrid', 'paris', 'berlin', 'rome'])
# 用items方法获取 key-values键值对
europe.items() # 每个元素是元组
dict_items([('spain', 'madrid'), ('france', 'paris'), ('germany', 'berlin'), ('italy', 'rome')])
通过key获取value值
# 输出france对应的值
europe['france']
'paris'
# 也可以使用get方法来获取key对应的值
europe.get('france')
# 需要注意的是 当key不存在时 使用[]将出错,使用get不会出错,key不存在,get默认返回None
'paris'
# 检查key是否在字典里
'britian' in europe
False
# 如果key不在字典里,get方法默认返回none
print(europe.get('britian'))
None
# 也可以自定义返回值
europe.get('britian','unknown')
'unknown'
字典的增删改
# 增加
europe['britian'] = 'landon'
europe
{'britian': 'landon',
'france': 'paris',
'germany': 'berlin',
'italy': 'rome',
'spain': 'madrid'}
# 修改
europe['britian'] = 'Landon'
europe
{'britian': 'Landon',
'france': 'paris',
'germany': 'berlin',
'italy': 'rome',
'spain': 'madrid'}
# 删除某个键值对
del(europe['britian'])
europe
{'france': 'paris', 'germany': 'berlin', 'italy': 'rome', 'spain': 'madrid'}
案例:找出一个文本中最高词频的单词
# 1. 获取单词列表
# 2. 初始化空字典
# 3. 构建单词和词频的列表 key为单词 value为词频 如果不存在 默认为0 存在一次加1
# 4. 在字典中查找词频最高的词
text = '''the clown ran after the car and the car ran into the tent
and the tent fell down on the clown and the car'''
words = text.split()
counts = {}
for word in words:
counts[word] = counts.get(word,0) + 1
print(counts)
bigcount = None
bigword = None
for word,count in counts.items():
if bigcount is None or count > bigcount:
bigword = word
bigcount = count
print(bigword,bigcount)
{'the': 7, 'clown': 2, 'ran': 2, 'after': 1, 'car': 3, 'and': 3, 'into': 1, 'tent': 2, 'fell': 1, 'down': 1, 'on': 1}
the 7
循环
while循环
- 在循环开始之前对变量初始化
- 设置满足进入循环的条件,不满足要退出循环
- 在循环体中重复执行响应的操作,并更新变量值
- 循环结束时查看最终变量
# 打印1到10的证书
num = 1# 循环开始初始化变量
while num <= 10:#进入循环或退出循环的条件
print(num)
num = num + 1#更新变量的值
1
2
3
4
5
6
7
8
9
10
循环控制
- 使用break终止当前循环
- 使用continue终止当前迭代,继续下一次迭代
# 计算从1到20的整数和,当和大于100时,终止计算
# 1. 初始化变量 sum 和 number
sum = 0
number = 0
while number <= 20:
number += 1
sum += number
if sum > 100:
break
print('最后一个数是'+str(number))
print('和是'+str(sum))
最后一个数是14
和是105
# 对从1到20 除了10 和11 外的整数进行相加
sum = 0
number = 0
while number < 20:
number += 1
if number == 10 or number == 11:
continue
sum += number
print('和是'+str(sum))
和是189
嵌套循环
- 一个循环体中还有循环就是嵌套循环
- 第一个循环称为外循环,内部的循环称为内循环
- 外循环每迭代一次,内部循环都会执行它的全部迭代
# 使用嵌套循环打印99乘法表
for i in range(1,10):
for j in range(1,10):
print(format(i * j,'4d'),end='') #4d表示每次打印 占据4个宽度 end以空格作为结束 而不是默认的换行
print('\n')#内循环一次 打印一次换行
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
自定义函数
- 自定义函数,需要定义函数名和相应的执行语句块,然后就可以在程序中反复调用
- 声明一个函数用def开始,后跟函数名参数放在括号中没参数括号内容为空但不能省略 并用冒号该行,之后是代表函数体的代码组,需要缩进
- 调用函数时函数名加括号,需要传递参数,在括号内写入需要传递的参数
- 如果需要指定返回值,在函数体中用return返回需要返回的内容
函数可以没有指定参数也可以没有返回值
# 定义函数 无参无返回值
def say_hello():
print('hello')
# 使用函数
say_hello()
# 没有明确返回值,函数默认返回None
print(say_hello());
hello
hello
None
函数内部也可以调用函数
def say_hello_twice():
say_hello()
say_hello()
say_hello_twice()
hello
hello