】目录
一、列表与字符串转换
二、列表推导式
三、元组
1、元组基本操作
2、元组和列表的内存图
四、容器思想
homework
一、列表与字符串转换
(1) 列表转换为字符串:
result = "连接符".join(列表)
# 根据xx条件,循环拼接字符串
# 需求 range(10) 0123456789
# str_result = ""
# for item in range(10):
# str_result += str(item)
# # ""+"0"
# # "0"+"1"
# # "01"+"2"
# # 缺点:每次循环相加时,都会产生新数据,替换旧数据
# print(str_result)# 解决:利用可变数据代替不可变数据
# 列表 字符串
str_result = []
for item in range(10):
str_result.append(str(item))
result = "".join(str_result)
print(result)
(2) 字符串转换为列表:
列表 = “a-b-c-d”.split(“分隔符”)
# 使用一个字符串存储多个信息list_result = " 唐僧 , 孙悟空 , 八戒 " . split ( "," )print ( list_result )
练习:
str_context = "I love you" # 将字符串翻转输出
str_list = str_context.split(" ")
str_list_ok = str_list[::-1]
print(" ".join(str_list_ok))
二、列表推导式
(1) 定义:
使用简易方法,将可迭代对象转换为列表。
(2) 语法:
变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]
(3) 说明:
如果条件不满足,则可迭代对象的元素将被丢弃。
# 练习一
# 生成10--30之间能被3或者5整除的数字
# 结果:[10, 12, 15, 18, 20, 21, 24, 25, 27]
list_result01 = []
for item in range(10,31):
if item % 3 ==0 or item % 5 == 0:
list_result01.append(item)
print(list_result01)
list_result02 = [item for item in range(10,31) if item % 3 ==0 or item % 5 == 0]
print(list_result02)
# 练习二
# 生成5 -- 20之间的数字平方
# 结果:[25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
list_result03 = [item ** 2 for item in range(5,21)]
print(list_result03)
三、元组
列表:由一系列变量组成的可变序列容器
元组:由一系列变量组成的不可变序列容器。
1、元组基本操作
创建
添加 不可变,没有
定位
删除 不可变,没有
遍历
## 创建,列表放元组里,节省内存
tuple_01 =("dd","ee","ff")
list_01 = ["理理","红红"]
tuple_02 = tuple(list_01)
## 定位
# 寻找第二个元素
print(tuple_01[1])
# 前两个
print(tuple_01[:2])
## 遍历
for item in tuple_01:
print(item)
## 在构建元组的时候,在没有歧义的情况下,可以省略小括号
tuple_03 = 10,20,30
print(tuple_03)
## 元组中如果只有一个元素,必须添加逗号
tuple_04 = ("李琦")
print(tuple_04) # 不是元组
tuple_05 = ("李琦",)
print(tuple_05) # 是元组
## 特别小心,下列代码是元组,不是字符串,因为有逗号
name = 10,
print(name) # 变为元组
## 序列可拆包(字符串,列表,元组)
tuple_01 =("dd","ee","ff")
a,b,c = tuple_01
print(a,b,c)
list_01 = ["理理","红红"]
a,b=list_01
print(a,b)
a,b,c="孙悟空"
print(a,b,c)# 变量交换
a = 10
b = 20
a,b=b,a # 变量交换的实质是元组省略小括号
2、元组和列表的内存图
列表:预留空间,自动扩容
元组:按需分配,之后不可变
练习:
我自己画图:
四、容器思想
练习1:
"""
练习:
在终端中输入月份,打印相应的天数.
1 3 5 7 8 10 12 有 31天
2 有 29天
4 6 9 11 有 30天
超过月份提示月份有误
效果:
请输入月份:10
31天
"""
month = int(input("请输入月份:"))
if 0 < month <= 12:
if month == 2:
print("28天")
elif month == 4 or month == 6 or month == 9 or month==11:
print("30天")
else:
print("31天")
else:
print("月份输入有误")
# 优化1
month = int(input("请输入月份:"))
if 0 < month <= 12:
if month == 2:
print("28天")
elif month in (4 ,6 ,9 ,11):
print("30天")
else:
print("31天")
else:
print("月份输入有误")
# 优化2
tuple_month = (31,29,31,30,31,30,31,31,30,31,30,31)
month = int(input("请输入月份:"))
print(tuple_month[month-1])
练习2:
# 练习2:
# 根据月日,计算是这一年的第几天.
# 公式:前几个月总天数 + 当月天数
# 例如:5月10日
# 计算:31 29 31 30 + 10
tuple_month = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
month = int(input("请输入月:"))
date= int(input("请输入日:"))
total_day = 0
for i in range(month-1):
total_day += int(tuple_month[i])
print(total_day+date)
# 使用tuple_month[:2] 会触发浅拷贝
# 优化
total_day = sum(tuple_month[:month-1],date)
print(total_day)
homework
""" 画出下列代码内存图 """ list01 = [10, 20, 30] for item in list01: item += 1 print(list01) # ?
list02 = [ [10], [20], [30], ] for item in list02: item[0] += 1 print(list02) # ?
我画的图: