目录
元组 tuple
元组的定义:
元组是不可改变的序列,同list一样,元组是可以存放任意类型的容器
元组的表示方法:
用小括号()括起来,单个元素括起来后加逗号(,)区分单个对象还是元组
创建空元组的字面值
t = () #t绑定空元组
创建非空元组
t = 200,
t = (20,)
t = (1,2,3)
t = 100,200,300
type(x) 函数用来返回 x 的类型
元组的错误示例:
t = (20) # t 绑定整数,不是元组
x,y,z = 100,200,300 #序列赋值等同于如下
x,y,z = (100,200,300) # 序列赋值
x,y,z = [100,200,300] # 序列赋值
x,y,z = "ABC" # 序列赋值
元组的构造(创建)函数 tuple
tuple() 生成一个空的元组,等同于()
tuple(interable) 用可迭代对象生成一个元组
示例:
t = tuple()
t = tuple([2,3,5,7])
t = tuple(range(10))
元组的运算:
+ 加号用于元组的拼接操作
* 乘号用于原元组生成重复的元组
+=
*=
示例:
t = (1,2,3) + (4,5,6) # t = (1,2,3,4,5,6)
t = (1,2) * 3 # t = (1,2,1,2,1,2)
t = (1,2,3)
t += (4,5,6) #等同于字符串规则
# t = (1,2,3,4,5,6)
元组的比较运算:
> >= < <= == !=
规则与列表的比较规则完全相同
示例:
(1,2,3) < (1,3,2) # True
(1,2,3) != (1,3,2) # True
....
(1,'二') < ('二',1) #False
(1,'二') != ('二',1) #True
in / not in 运算符:
与列表的in /not in 规则完全相同
2 in (1,2,3,4) # True
'2' not in (1,2,3,4) #True
索引和切片
索引:
元组[整数]
切片:
元组[整数:整数]
元组[整数:整数:整数]
规则同字符串的切片规则
元组不支持索引赋值和切片赋值
练习:
生成一个 1~9 的平方的元组,元组如下:
(1,4,9,16,....,81)
l = [x ** 2 for x in range(1,10)]
print(tuple(l))
元组的方法:
T.index(v[,beijin[,end]])
返回对应元素的索引下标,beijin为开始索引,end为结束索引,v不存在时触发ValueErorr错误
# t.index(2,2,5)
T.count(x) 返回元组中对应元素的个数
序列的种类:
字符串 str , 列表list, 元组tuple, 字节串bytes, 字节数组bytearray
能用于序列的函数总结:
len(x) , max(x), min(x), sum(x), any(x), all(x)
str(obj) 将对象转为字符串
list(iterable) 将可迭代对象转为列表
tuple(iterable) .........转为元组
reversed(seq) 返回反向顺序的可迭代对象
sortde(iterable,reverse=False)
字典 dict
什么是字典?
1.字典是一种可变的容器,可以存储任意类型的数据
2.字典中的每个数据都是用"键"(key) 进行索引,而不像序列可以用下标来进行索引
3.字典中的数据没有先后顺序关系,字典的存储是无序的
4.字典中的数据以键(key)-值(value)对形式进行映射存储
5.字典的键不能重复,且只能用不可变类型作为字典的键
字典的字面值表示方式:
{} 括起来,以冒号(:) 分隔键-值对,各键-值对用逗号分隔开
创建空字典:
d = {} #空字典
创建非空字典:
d = {'name':'tarena', 'age':15}
d = {'1':'星期一', '2':"星期二"}
以下写法会出现问题(因为键不能重复)
d = {'a':1, 'b':2, 'a':'一'}
字典的构造(创建)函数 dict
dict() # 创建空字典等同于 {}
dict(interable) 用可迭代对象初始化一个字典
dict(**kwargs) 关键字传参形式生成一个字典
示例:
d = dict()
d = dict([('name', 'tarena'),('age',15)])
d = dict(name='tarena', age=15)
字典的基本操作:
字典的键索引
用[] 运算符可以获取和修改键所对应的值
语法:
字典[键]
示例:
d = {'name': 'tarena', 'age':15}
print('姓名', d['name'],'年龄:', d['age'])
添加/修改字典的元素
字典[键] = 值
示例:
d = {}
d['name'] = 'tarena'
键索引赋值说明:
当键不存在时,创建键并绑定键对应的值
当键存在时,修改键绑定的对象
删除字典的元素
del 语句 可以用来删除字典的键
语法:
del 字典[键]
示例:
d = {1:"星期一",2:'星期二'}
del d[2]
in 运算符(成员资格判断运算符)
1. 可以用in运算符来判断一个键是否存在于字典中,如果存在则返回True,否者返回False
2. not in 与 in 相反
示例:
d = {1:"One",2:"Two","三":'Three'}
1 in d # True
'二' in d # False
3 not in d # True
'One' in d #False
字典的迭代访问:
字典是可迭代对象,字典只能对键进行迭代访问
示例:
d = {1:"One",2:"Two","三":'Three'}
for k in d:
print(k,'对应的值是:',d[k])
小练习:
写程序,实现一下要求:
1.将如下数据形成一个字典 seasons
键 值
1 '春季有1,2,3月'
2 '春季有4,5,6月'
3 '春季有7,8,9月'
4 '春季有10,11,12月'
2.让用户输入一个整数代表季度,打印这个季度的信息。
如果用户输入的信息不在字典中,则提示信息不存在
seasons ={1:'春季有1,2,3月',
2:'春季有4,5,6月',
3:'春季有7,8,9月',
4:'春季有10,11,12月'}
a = int(input('请输入一个整数: '))
if a in seasons:
print(a,'代表的季度是:',seasons[a])
else:
print('信息不存在')
可以用于字典的内建(built-in)函数
len(x) 返回字典的键值对的个数
max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典的键的和
any(x) 真值测试,如果字典中的一个键为真,则结果为真
all(x) 真值测试,字典中所有键都为真,则结果才为真
字典的方法:
函数 说明
D代表字典对象
D.clear() 清空字典
D.pop(key) 移除键,同时返回此键所对应的值
D.copy() 返回字典D的副本,只复制一层(浅拷贝)
D.update(D2) 将字典 D2 合并到D中,如果键相同,则此键的值取D2的值作为新值
D.get(key, default) 返回键key所对应的值,如果没有此键,则返回default
D.keys() 返回可迭代的 dict_keys 集合对象
D.values() 返回可迭代的 dict_values 值对象
D.items() 返回可迭代的 dict_items 对象
示例:
d = {1:"One",2:"Two","3":'Three'}
for k, v in d.items():
print("字典的键是:",k,"值是:", v)
练习:
输入一段字符串,打印出这个字符串中出现过的字符及字符出现过的次数
如:
输入: abcdabcaba
输出:
a: 4次
b: 3次
c: 1次
d: 2次
(不要求打印的顺序)
s = input("请输入字符串: ")
# 方法1:
# 去除重复的
L = [] # 此列表用来存储出现过的字符
for ch in s:
if ch not in L: # 第一次出现
L.append(ch)
# print('去重之后的列表', L)
for ch in L:
print(ch, ':', s.count(ch), '次')
print('---方法2-----')
d = {} # 定义一个字典,字典的键为出现过的字符
# 字典的值为出现过的次数
for ch in s:
if ch not in d: # ch第一次出现
d[ch] = 1 # 添加这个字符到字典中,次数设置为1
else: # ch不是第一次现出现
d[ch] += 1
for ch in d:
print(ch, ':', d[ch], '次')
字典推导式
字典推导式是用可迭代的对象依次生成字典的表达式
语法:
{键表达式:值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: [] 及其中的内容代表可省略
说明:
1.先从可迭代对象中取值
2.用变量绑定
3.用if 进行条件判断,如果为真值则执行下一步
4.执行‘键表达式’和'值表达式'然后加入到新字典中
示例:
生成一个字典,键为1~9的整数,值为键的平方
d = {x: x**2 for x in range(1,10)}
练习1:
有如下字符串:
L = ['tarena','china','beijing']
生成如下字典:
D = {'tarena':6,'china':5,'beijing':7}
练习2:
No = [1001,1002,1005,1008]
names = ['Tom','Jerry','Spike','Tyke']
用上面No列表中的数据作为键,用names中的数据作为值,生成相应的字典:
如:
d = {1001:'Tom',1002:'Jerry'...}
No = [1001,1002,1005,1008]
names = ['Tom','Jerry','Spike','Tyke']
d = {(No[x]):(names[x]) for x in range(4)}
print(d)
练习:
1. 输入一些单词和解释,将单词作为键,将解释作为值,将这些数据输入到字典中,当输入空的单词时结束输入
然后,输入查询的单词,给出单词对应的解释
2.(重要)
输入任意个学生的信息:
学生信息有:
姓名(字符串str)
年龄(整数int)
成绩(整数int)
当输入学生姓名为空时结束输入
1) 将每个学生的信息形成字典,存于列表中:
如:
[{'name':'xiaozhang','age':20,'score':97},
{'name':'xiaoli','age':18,'score':95},
...
]
2) 以表格的形式打印所有学生的信息,如下:
+----------------+-----------+------+
| name | age | score|
+----------------+-----------+------+
| xiaozhang | 20 | 97 |
| xiaoli | 18 | 95 |
| ... | ... | ... |
+----------------+-----------+------+
#1.
d = {}
while True :
a = input("请输入一个单词:")
if len(a) == 0:
break
b = input("请输入一个解释:")
d[a] = b
print(d)
x = input("请输入查询的单词:")
if x in d:
print(d[x])
else:
print('查无此词')
#2.
L = [] #创建一个列表,用来保存所有学生的字典
# 读取学生数据放入列表中
while True:
n = input("请输入学生姓名:")
if not n: #如果学生姓名为空则结束输入
break
a = int(input("请输入学生年龄:"))
s = int(input("请输入学生成绩:"))
# 把上述n,a,s 所表示的信息形成字典,并加入到列表
d = {} #创建一个字典,准备存入学生信息数据
d['name'] = n
d['age'] = a
d['score'] = s
L.append(d) #把字典存入列表中
print(L)
print("+----------------+-----------+------+")
print("| name | age | score|")
print("+----------------+-----------+------+")
# 第二步,显示所有的学生的信息
for d in L: # 把每个学生的数据取出来,用d绑定对应的字典
center_name = d['name'].center(15)
str_age = str(d['age']) # 先将年龄转为字符串
center_age = str_age.center(10) #生成居中的字符串
center_score = str(d['score']).center(10)
line = "|%s|%s|%s" % (center_name,
center_age,
center_score)
print(line)
print("+----------------+-----------+------+")