1.列表List
1.1 列表 VS 字符串
- 列表和字符串都是序列,元素之间有先后顺序关系。
- 字符串是不可变的序列,列表是可变的序列。
- 字符串中每个元素只能存储字符,而列表可以存储任意类型。
- 列表和字符串都是可迭代对象。
- 函数:
将多个字符串拼接为一个。
result = “连接符”.join(列表)
将一个字符串拆分为多个。
列表 = “a-b-c-d”.split(“分隔符”)
1.2 列表推导式
- 定义:
使用简易方法,将可迭代对象转换为列表。 - 语法:
变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件] - 说明:
如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃。
1.3 列表推导式嵌套
- 语法:
变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2] - 传统写法:
result = []
for r in [“a”, “b”, “c”]:
for c in [“A”, “B”, “C”]:
result.append(r + c) - 推导式写法:
result = [r + c for r in list01 for c in list02]
2.tuple
2.1 定义
- 由一系列变量组成的不可变序列容器。
- 不可变是指一但创建,不可以再添加/删除/修改元素。
2.2 基础操作
- 创建空元组:
元组名 = ()
元组名 = tuple() - 创建非空元组:
元组名 = (20,)
元组名 = (1, 2, 3)
元组名 = 100,200,300
元组名 = tuple(可迭代对象) - 获取元素:
索引、切片 - 遍历元组:
正向:
for 变量名 in 元组名:
变量名就是元素
反向:
for 索引名 in range(len(列表名)-1,-1,-1):
元祖名[索引名]就是元素
2.3 作用
- 元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素。
- 元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小。
- 应用:
变量交换的本质就是创建元组:x, y = y, x
格式化字符串的本质就是创建元祖:“姓名:%s, 年龄:%d” % (“tarena”, 15)
3.字典dict
3.1 定义
- 由一系列键值对组成的可变映射容器。
- 映射:一对一的对应关系,且每条记录无序。
- 键必须惟一且不可变(字符串/数字/元组),值没有限制。
3.2 基础操作
- 创建字典:
字典名 = {键1:值1,键2:值2}
字典名 = dict (可迭代对象) - 添加/修改元素:
语法:
字典名[键] = 数据
说明:
键不存在,创建记录。
键存在,修改映射关系。 - 获取元素:
变量 = 字典名[键] # 没有键则错误 - 遍历字典:
for 键名 in 字典名:
字典名[键名]
for 键名,值名 in 字典名.items():
语句 - 删除元素:
del 字典名[键]
3.3 字典推导式
- 定义:
使用简易方法,将可迭代对象转换为字典。 - 语法:
{键:值 for 变量 in 可迭代对象}
{键:值 for 变量 in 可迭代对象 if 条件}
3.4 字典 VS 列表
- 都是可变容器。
- 获取元素方式不同,列表用索引,字典用键。
- 字典的插入,删除,修改的速度快于列表。
- 列表的存储是有序的,字典的存储是无序的。
4.今日份实验
4.1 列表的语法练习
4.1.1 求给定列表中的最小值
"""
计算列表中最小值(不使用min)
"""
list01 = [43, 54, 5]
min_value = list01[0]
for i in range(1, len(list01)):
if min_value > list01[i]:
min_value = list01[i]
print(min_value)
运行结果如下所示:
4.1.2 按照指定要求随机产生一注彩票
需求1:彩票 双色球:
红球:6个,1 – 33 之间的整数 不能重复
蓝球:1个,1 – 16 之间的整数
(1) 随机产生一注彩票[6个红球1个蓝球].
"""
彩票 双色球:
红球:6个,1 -- 33 之间的整数 不能重复
蓝球:1个,1 -- 16 之间的整数
(1) 随机产生一注彩票[6个红球1个蓝球].
"""
import random
list_ticket = []
# 6个不重复的红球
while len(list_ticket) < 6:
random_number = random.randrange(1, 33)
# 如果随机数不存在,则存储。
if random_number not in list_ticket:
list_ticket.append(random_number)
# 1个蓝球
list_ticket.append(random.randrange(1, 16))
print(list_ticket)
运行结果如下所示:
需求2:在控制台中购买一注彩票
提示:
“请输入第1个红球号码:”
“请输入第2个红球号码:”
“号码不在范围内”
“号码已经重复”
“请输入蓝球号码:”
"""
在控制台中购买一注彩票
提示:
"请输入第1个红球号码:"
"请输入第2个红球号码:"
"号码不在范围内"
"号码已经重复"
"请输入蓝球号码:"
"""
# 6个1--33范围内的不重复红球号码
list_ticket = []
while len(list_ticket) < 6:
number = int(input("请输入第%d个红球号码:" % (len(list_ticket) + 1)))
if number < 1 or number > 33:
print("号码不在范围内")
elif number in list_ticket:
print("号码已经重复")
else:
list_ticket.append(number)
# 1个1--16范围内的蓝球号码
while len(list_ticket) < 7:
number = int(input("请输入蓝球号码:"))
if 1 <= number <= 16:
list_ticket.append(number)
else:
print("号码不在范围内")
print(list_ticket)
运行结果如下所示:
4.1.3 列表推导式
"""
列表推导式
"""
# 将list01中所有元素,增加1以后存入list02中.
list01 = [5, 56, 6, 7, 7, 8, 19]
# list02 = []
# for item in list01:
# list02.append(item + 1)
list02 = [item + 1 for item in list01]
print(list02)
# 将list01中大于10元素,增加1以后存入list02中.
# list02 = []
# for item in list01:
# if item >10:
# list02.append(item + 1)
list02 = [item + 1 for item in list01 if item > 10]
运行结果如下所示:
4.1.4 元组基础操作
"""
元组
基础操作
"""
# 1. 创建元组
# 空
tuple01 = ()
# 具有默认值
tuple01 = (1, 2, 3)
# 列表 --> 元组
tuple01 = tuple(["a", "b"])
print(tuple01)
# 元组 --> 列表
list01 = list(tuple01)
print(list01)
# 如果元组只有一个元素
# tuple02 = (100)
# print(type(tuple02))# int
tuple02 = (100,)
print(type(tuple02)) # tuple
# 不能变化
# tuple02[0] = 10
# 2. 获取元素(索引 切片)
tuple03 = ("a", "b", "c", "d")
e01 = tuple03[1]
print(type(e01)) # str
e02 = tuple03[-2:]
print(type(e02)) # tuple
# 可以直接将元组赋值给多个变量
tuper04 = (100, 200)
a, b = tuper04
print(a)
print(b)
# 3. 遍历元素
# 正向
for item in tuper04:
print(item)
# 反向
# 1 0
for i in range(len(tuper04) - 1, -1, -1):
print(tuper04[i])
运行结果如下所示:
4.1.5 列表推导式的练习
# 练习:使用range生成1--10之间的数字,将数字的平方存入list01中
# list01 = []
# for item in range(1, 11):
# list01.append(item ** 2)
list01 = [item ** 2 for item in range(1, 11)]
#练习:将list01中所有奇数存入list02
# list02 = []
# for item in list01:
# if item % 2 == 1:
# list02.append(item)
list02 = [item for item in list01 if item % 2 == 1]
#练习:将list01中所有偶数存入list03
list03 = [item for item in list01 if item % 2 == 0]
#练习:将list01中所有偶数大于5的数字增加1后存入list04
# list04 = []
# for item in list01:
# if item % 2 == 0 and item > 5:
# list04.append(item + 1)
print(list01)
list04 = [item + 1 for item in list01 if item % 2 == 0 and item > 5]
print(list04)
运行结果如下所示:
4.1.6 利用元组求每月天数
"""
练习:借助元组完成下列功能.
"""
# month = int(input("请输入月份:"))
#
# if month < 1 or month > 12:
# print("输入有误")
# elif month == 2:
# print("28天")
# elif month == 4 or month == 6 or month == 9 or month == 11:
# print("30天")
# else:
# print("31天")
# 方式1:
# month = int(input("请输入月份:"))
#
# if month < 1 or month > 12:
# print("输入有误")
# elif month == 2:
# print("28天")
# elif month in (4,6,9,11):
# print("30天")
# else:
# print("31天")
# 方式2:
month = int(input("请输入月份:"))
if month < 1 or month > 12:
print("输入有误")
else:
# 将每月天数存入元组
day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
print(day_of_month[month - 1])
运行结果如下所示:
4.1.7 求已给日期是这一年中第几天
"""
练习:在控制台中录入日期(月日),计算这是这一年的第几天.
例如:3月5日
1月天数 + 2月天数 + 5
5月8日
1月天数 + 2月天数 +3月天数 + 4月天数+ 8
"""
day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
month = int(input("请输入月份:"))
day = int(input("请输入日:"))
# 方法一:
# # 累加前几个月天数
total_day = 0
for i in range(month - 1):
total_day += day_of_month[i]
# 累加当月天数
total_day += day
print("%d月%d日是这年的第%d天." % (month,day,total_day))
# 方法二:
# 累加前几个月天数
total_day = sum(day_of_month[:month - 1])
total_day += day
print("%d月%d日是这年的第%d天." % (month,day,total_day))
运行结果如下所示:
4.2 字典的语法练习
4.2.1 创建、修改以及遍历字典
"""
字典
"""
# 1. 创建
# 空
dict01 = {}
dict01 = dict()
# 默认值
dict01 = {"wj":100,"zm":80,"zr":90}
dict01 = dict([("a","b"),("c","d")])
print(dict01)
# 2. 查找元素(根据key查找value)
print(dict01["a"])
# 如果key不存在,查找时会错误.
if "qtx" in dict01:# 如果存在key
print(dict01["qtx"])
# 3. 修改元素(之前存在key)
dict01["a"] = "BB"
# 4. 添加(之前不存在key)
dict01["e"] = "f"
# 5. 删除
del dict01["a"]
print(dict01)
# 6. 遍历(获取字典中所有元素)
# 遍历字典,获取key
for key in dict01:
print(key)
print(dict01[key])
# 遍历字典,获取value
for value in dict01.values():
print(value)
# 遍历字典,获取键值对key value(元组).
# for item in dict01.items():
# print(item[0])
# print(item[1])
for k,v in dict01.items():
print(k)
print(v)
运行结果如下所示:
4.2.2 在控制台录入商品名称和单价,并打印
"""
在控制台中循环录入商品信息(名称,单价),如果名称输入空字符,则停止录入,将所有信息逐行打印出来.
"""
dict_commodity_info = {}
while True:
name = input("请输入商品名称:")
if name == "":
break
price = int(input("请输入商品单价:"))
dict_commodity_info[name] = price
for key,value in dict_commodity_info.items():
print("%s商品单价是%d"%(key,value))
运行结果如下所示:
4.2.3 字典内嵌列表的练习
# 练习2: 在控制台中循环录入学生信息(姓名,年龄,成绩,性别),如果名称输入空字符, 则停止录入,将信息逐行打印出来.
# 字典内嵌列表:
{
"张无忌":[28,100,"男"]
}
"""
dict_student_info = {}
while True:
name = input("请输入姓名:")
if name == "":
break
age = int(input("请输入年龄:"))
score = int(input("请输入成绩:"))
sex = input("请输入性别:")
dict_student_info[name] = [age, score, sex]
# 打印所有学生信息
for name,list_info in dict_student_info.items():
print("%s的年龄是%d,成绩是%d,性别是%s"%(name,list_info[0],list_info[1],list_info[2]))
运行结果如下所示:
4.2.4 字典内嵌字典的练习
"""
# 字典内嵌字典:
{
"张无忌":{"age":28,"score":100,"sex":"男"},
}
"""
dict_student_info = {}
while True:
name = input("请输入姓名:")
if name == "":
break
age = int(input("请输入年龄:"))
score = int(input("请输入成绩:"))
sex = input("请输入性别:")
dict_student_info[name] = {"age": age, "score": score, "sex": sex}
for name, dict_info in dict_student_info.items():
print("%s的年龄是%d,成绩是%d,性别是%s" %(name, dict_info["age"],dict_info["score"], dict_info["sex"]))