Python-Level1-day05:列表基础操作

0 作业与复习

作业
1. 三合一
2. 当天练习独立完成
3. 自学教程的字符串新版占位符f-string
    https://www.runoob.com/python3/python3-string.html
4. 模拟登录
    如果账号的密码错误3次,提示锁定账户,效果如下:
        请输入账号:qtx
        请输入密码:1234
        登录失败
        你还剩余 2 次机会
        请输入账号:Qtx
        请输入密码:1234
        登录失败
        你还剩余 1 次机会
        请输入账号:Qtx
        请输入密码:123456
        登录成功
6. (选做)赌大小游戏
    玩家的身家初始10000,实现下列效果:
        少侠请下注: 30000
        超出了你的身家,请重新投注。
        少侠请下注: 8000
        你摇出了5点,庄家摇出了3点
        恭喜啦,你赢了,继续赌下去早晚会输光的,身家还剩18000
        少侠请下注: 18000
        你摇出了6点,庄家摇出了6点
        打平了,少侠,在来一局?
        少侠请下注: 18000
        你摇出了4点,庄家摇出了6点
        少侠,你输了,身家还剩 0
        哈哈哈,少侠你已经破产,无资格进行游戏
​
7. (选做)一个小球从100m高度落下,每次弹回原高度一半.
   计算:
    -- 总共弹起多少次?(最小弹起高度0.01m)
    -- 全过程总共移动多少米?
   提示:
       数据/算法
​
8.阅读
    https://unicode-table.com/cn/
    程序员的数学第四章:数学归纳法

"""
    如果账号密码错误3次,提示锁定账户,效果如下:
"""
count = 0
while count < 3:
    mima = input("please  mima")
    if mima == "123456":
        print("ok")
        break
    else:
        count += 1
        print("have %s ji hui" % (3 - count))
else:
    print("no")
​

​
"""
 赌大小游戏
"""
import random
​
my_money = 10000
while my_money > 0:
    bet = input("qing xia zhu")
    if bet == "":
        print("zhu dong tui chu")
        break
    bet = int(bet)
    if bet > my_money:
        print("mei you nan mei duo qian")
        continue
    my_dian = random.randint(1, 7)
    other_dian = random.randint(1, 7)
    if my_dian > other_dian:
        my_money += bet
        print("your score %s  other score %s" % (my_dian, other_dian))
        print("my momey = %s" % (my_money))
    else:
        my_money -= bet
        print("your score %s  other score %s" % (my_dian, other_dian))
        print("my momey = %s" % (my_money))
else:
    print("have no money")

"""
一个小球从100m高度落下,每次弹回原高度一半.
"""
count = 0
height = 100
while height/2 >= 1e-2:
    height /= 2
    count += 1
print(f"tan qi {count} ci")
​
​


1 容器通用操作

切片 slice

  1. 作用:定位多个容器元素。

  2. 语法:容器[开始索引:结束索引:步长]

  3. 说明:结束索引不包含该位置元素;步长是切片每次获取完当前元素后移动的偏移量;开始、结束和步长都可以省略

内建函数

  1. len(x) 返回序列的长度

  2. max(x) 返回序列的最大值元素

  3. min(x) 返回序列的最小值元素

  4. sum(x) 返回序列中所有元素的和(元素必须是数值类型)

"""
切片 slice
"""
memo = "0123456789"
​
print(memo[1:3:1])  # 1 2
print(memo[1:3])  # 1 2
print(memo[:3:])  # 0 1 2
print(memo[:3])  # 0 1 2 开头默认0 间隔默认1
print(memo[::])  # "0123456789"
print(memo[:])  # "0123456789"
print(memo[5:])  # 结尾默认最后,间隔默认1
print(memo[-5:-1])  # 5678
print(memo[-5:])  # 56789
​
print(memo[::-1])  # 翻转记住
​
print(memo[2:-3:])  # 23456
print(memo[-1:1:-1])  # 98765432 倒着走得加-1
​

"""
字符串: content = "我是京师监狱狱长金海。"
打印第一个字符、打印最后一个字符、打印中间字符 打印字前三个符、打印后三个字符
"""
content = "我是京师监狱狱长金海"
print(content[0])
print(content[len(content) - 1])
print(content[len(content) // 2])
​
print(content[:3])
print(content[-1:-4:-1])  # 海金长
print(content[-3:])  # 长金海
​
​

2 列表

列表 list定义:由一系列变量组成的可变序列容器。

基础操作

  1. 创建列表: 列表名 = [] ;列表名 = list(可迭代对象)

  2. 添加元素:列表名.append(元素);列表.insert(索引,元素)

  3. 定位元素:列表名[索引] = 元素

变量 = 列表名[索引]

变量 = 列表名[切片] # 赋值给变量的是切片所创建的新列表

列表名[切片] = 容器 # 右侧必须是可迭代对象,左侧切片没有创建新列表。

遍历列表:

正向:

for 变量名 in 列表名:

变量名就是元素

反向:

for 索引名 in range(len(列表名)-1,-1,-1):

列表名[索引名]就是元素

  1. 删除元素:

列表名.remove(元素)

del 列表名[索引或切片]

"""
    列表 list 定义由一系列变量组成的可变序列容器
​
        列表里面存变量,不是数据
​
"""
# 创建
list_name = ["dpq", "bac", "rgz"]  # 创建方法一
list02 = list("haaaa")  # 创建方法二
print(list02)
​
# 追加
list02.append("jin")
print(list02)
# 插入
list02.insert(0, "aaa")
print(list02)
​

"""
练习 1:创建地区列表、新增列表、现有列表,至少存储 3 行信息
练习 2:向以上三个列表追加数据第 4 行数据 在第 1 个位置插入第 5 行数据
"""
list_area = ["JS", "HB", "LN"]
list_new = [1, 2, 4, 5]
list_now = [23, 45, 67]
​
list_area.append("NJ")
list_new.insert(0, 22)
​

"""
    列表基础操作list
        定位与切片
"""
list_area = ["JS", "HB", "LN"]
​
# 定位
print(list_area[0])  # 读取
name = list_area[-1]  # 读取
list_area[0] = "DJS"  # 修改
​
#切片
# 切片读取--会创建新列表即拷贝动作; 优点是灵活,缺点是占用内存
new_list = list_area[:2]
print(new_list)
# 切片修改---这里不会创建新的列表
list_area[-2:] = ["hello", "world"]
print(list_area)
​

"""
打印香港疫情信息(xx 地区新增 xx 人现存 xx 人)
将地区列表后 2 个元素修改为 ["XJ","SC"]
"""
​
list_area = ["JS", "HB", "LN"]
list_new = [1, 2, 4, 5]
list_now = [23, 45, 67]
​
print("%s diqu new %d now %d" % (list_area[0], list_new[0], list_now[0]))
# print(f"{list_area[0]} diqu new {list_new[0]} now {list_now[0]}")
​
list_new[-2:] = [3, 6]
​
​

"""
    列表的  遍历与删除
"""
list_area = ["JS", "HB", "LN"]
​
# 从头到尾读取
for item in list_area:
    print(item)
​
# 错误修改
for item in list_area:  # 这样修改无效,只是改变量,不是改列表
    item = "1"
print(list_area)
​
# 正确修改
for i in range(len(list_area)):
    if list_area[i] == "JS":
        list_area[i] = "DJS"
print(list_area)
​
# 从尾巴到头读取
for item in list_area[::-1]:  # 不建议 切片读取会创建新列表,占内存
    print(item)
​
for i in range(len(list_area) - 1, -1, -1):  # 强烈建议通过索引读取
    print(list_area[i])
​

"""
练习:打印地区列表元素(一行一个)
"""
​
list_area = ["JS", "HB", "LN"]
​
for item in list_area:
    print(item)
​
for i in range(len(list_area) - 1, -1, -1):
    print(list_area[i])
​
for item in list_area[::-1]:  # 读取切片拷贝动作
    print(item)

"""
    列表删除  remove del
"""
​
list_area = ["JS", "HB", "LN"]
​
#根据元素的删除
list_area.remove("JS")#元素不存在会报错,改进一下代码
print(list_area)
​
if "JS" in list_area:
    list_area.remove("JS")
print(list_area)
​
#根据定位删除,不知道元素
del list_area[0:1] #此时没有数据的拷贝动作,拷贝是对于读取
print(list_area)#函数是带括号的,del等只是一个关键字

"""
在地区列表中删除“新疆”
在新增列表中删除第 1 个元素
在现有列表中删除前 2 个元素
"""
list_area = ["JS", "HB", "LN","XJ"]
​
list_area.remove("XJ")
print(list_area)
​
del list_area[1]
del list_area[0:2]
print(list_area)

"""
列表综合练习
​
八大行星:"水星" "金星" "地球" "火星" "木星" "土星" "天王星" "海王星"
-- 创建列表存储 4 个行星:“水星” "金星" "火星" "木星"
-- 插入"地球"、追加"土星" "天王星" "海王星"
-- 打印距离太阳最近、最远的行星(第一个和最后一个元素)
-- 打印太阳到地球之间的行星(前两个行星) -
- 删除"海王星",删除第四个行星
-- 倒序打印所有行星(一行一个)
"""
​
list_star = ["水星", "金星", "火星", "木星"]
list_star.insert(2, "地球")
​
list_star += ["土星", "天王星", "海王星"]
# list_star.append("土星")
# list_star.append("天王星")
# list_star.append("海王星")
​
print(list_star[0])
print(list_star[-1])
​
for i in range(0, 2, 1):
    print(list_star[i])
​
list_star.remove("海王星")
del list_star[3]
​
for i in range(len(list_star) - 1, -1, -1):
    print(list_star[i])
​

深拷贝和浅拷贝

浅拷贝:复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程。

深拷贝:复制整个依懒的变量。

​
"""
    列表内存图
"""
list01 = [10, 20, 30]
data01 = list01  # 给的是列表的地址,不是列表本身,区别于data01 = list01[::] 切片拷贝列表
data02 = list01[0]  # 索引表示CPU内存寻址
data03 = list01[:2]  # 切片会拷贝列表
​
list01[0] = 100
list01[:2] = [1000, 2000]  # 创建了一个无名列表[1000, 2000]
#[1000, 2000]这个列表引用计数为0.内存自动回收
​
print(list01)
print(data01)
print(data02)
print(data03)
​
​

 

"""
练习 1:画出下列代码内存图
"""
list01 = ["北京", "上海"]
list02 = list01
list01[0] = "广州"
list03 = list01[:]
list03[-1] = "深圳"
print(list01)  # ?
​

 

"""
列表内存图:
   添加内存图:append 与 insert 原理图不一样
    删除内存图:del 与 remove 原理图一样,都是从后一个元素往前挤
"""
list01 = [10, 20, 30]
list01.append(40)#直接在最后一个添加
list01.insert(1, 50) #一定是从最后一个开始往后挪  麻烦别人,性能没有append高
​
list02 = [10, 20, 30, 40]
list02.remove(20)#remove函数内部实现有for查询 效率低
del list02[1] #直接删除效率高
​

 

 

"""
练习 2:画出下列内存图
list01 = ["北京", "上海", "深圳"]
list02 = list01 list01.insert(0,"天津")
del list01[1] print(list02)# ?
"""
​
list01 = ["北京", "上海", "深圳"]
list02 = list01
list01.insert(0, "天津")
del list01[1]
print(list02)  # ?
​

 

"""
    浅拷贝
        深拷贝:占内存多但是数据修改不影响另外一份
        浅拷贝:占内存少但会影响另外一份数据
"""
list01 = [10, [20, 30], [40, 50]]
list02 = list01[::]  # 浅拷贝 只复制第一层列表
list01[0] = 100  # 修改第一层,互不影响
list01[1][0] = 200  # 修改第二层,相互影响
​

 

"""
    深拷贝
"""
import copy  # 准备工具
​
list01 = [10, [20, 30], [40, 50]]
list02 = copy.deepcopy(list01)  # 浅深 拷贝 复制二层列表
list01[0] = 100  # 修改第一层,互不影响
list01[1][0] = 200  # 修改第二层,互不影响
​

 

"""
练习 3:画出下列内存图
"""
import copy
​
list01 = ["北京", ["上海", "深圳"]]
list02 = list01
list03 = list01[:]
list04 = copy.deepcopy(list01)
list04[0] = "北京 04"
list04[1][1] = "深圳 04"
print(list01)  # ?
list03[0] = "北京 03"
list03[1][1] = "深圳 03"
print(list01)  # ?
list02[0] = "北京 02"
list02[1][1] = "深圳 02"
print(list02)  # ?
​

作业
1. 三合一(文档/demo/图片)
2. 当天练习独立完成
3. 根据列表中的数字,重复生成*.
    list01 = [1, 2, 3, 4, 5, 4, 3, 2, 1]
    效果:
        *
        **
        ***
        ****
        *****
        ****
        ***
        **
        *
4. 将列表中的数字累乘
   list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
   结果:806400
5. 将列表中整数的个位不是5和3的数字存入另外一个列表
   list03 = [25, 63, 27, 75, 70, 83, 27]
   结果:[27, 70, 27]
6. 计算列表中字符串⻓度⼤于2,并且第⼀个和最后⼀个字符相同的字符串个数
    字符串列表:words =["qtx","看一看","想啊想","练练"]
    结果:2
7. 在终端中录入疫情地区名称,如果输入空字符串,则停止。
   最后倒序打印所有地区名称(一行一个)
   要求:录入的名称已经存在不要再次添加.
   提示: in
8. 在终端中录入5个疫情省份的确诊人数
   最后打印最大值、最小值、平均值.
   (使用内建函数实现)
9. 阅读
    程序员的数学第三章 - 余数
    Python入门到实践第三章第四章 - 列表
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dpq666dpq666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值