(自学#python) Day06-字符串、列表通用操作

(自学Python) Day06-字符串、列表通用操作

一、定义

由一系列字符编码值组成的不可变序列容器
在这里插入图片描述

二、编码

1、字符集

#字符与整数对应关系的集合
(1)ASCII:包含英文、数字等字符
(2)GBK:兼容ASCII,包含21886个中文
(3)Unicode:几乎涵盖全球所有已知字符

在这里插入图片描述

2、编码方式

#将字符转换为整数的规则
(1)ASCII:每个字符占1个字节

(2)GBK:英文1个字节,中文2个字节

(3)UTF8:英文1个字节,中文3个字节

三、字符串是不可变的数据

"""
    字符串是不可变的数据
"""
#采取"按需分配"的存储策略,节省内存空间
#原因:如果在原有内存中修改,很可能破坏其他数据空间(损人利己)
#现象:每次需要修改字符串时,都会创建新数据,替换变量中存储的地址
name = "悟空"
name = "孙悟空"
name = "齐天大圣"
print(name) # ?

四、字符串字面值

1、单引和双引号的区别

(1) 单引号内的双引号不算结束符
(2) 双引号内的单引号不算结束符
print('悟空')
print("悟空")
print('花果山"水帘洞"美猴王孙悟空') 
print("""花果山'水帘洞'"美猴王"孙悟空""") 

2、三引号作用

(1) 换行会自动转换为换行符\n
(2) 三引号内可以包含单引号和双引号
(3) 作为文档字符串

3、转义字符

(1) 定义:改变字符的原始含义。
(2) 语法: \'   \\"   \n   \\
print("花果山\"水帘洞\"美猴王孙悟空") 
print("花果山水帘洞\n美猴王孙悟空")
print("C:\\newfile\\test.py")
(3) 原始字符串:取消转义。
print(r"C:\newfile\test.py")

4、格式化

(1) 作用:将变量插入到字符串时,可以先用占位符描述格式后插入变量
(2) 占位符:%s 原样输出     %d 整数保留位数     %f 小数保留精度
(3) 语法:格式%(变量)
name = "大圣"
age = "6"
money = 1.2345
hour = 2
minute = 6
print("我叫%s,今年%s岁啦" % (name, age))
print("请支付:%.2f元" % money)
print("%.2d:%.2d" % (hour,minute))

5、小结

"""
    字符串字面值
"""
# 双引号
name01 = "悟空"
# 单引号
name02 = '悟空'
# 三引号:所见即所得
print("""
孙
    悟
空
""")
print('''
孙
    悟
空
''')

# 引号冲突
print('我是"花果山"孙悟空')
print("我是'花果山'孙悟空")

# 转义符:改变原有含义的特殊字符
print("我是\"花果山\"孙悟空")
# 换行
print("我是\n花果山孙悟空")
print("C:\\aRIVERS\\bMDVGA")
# 原始字符(没有转义符)
print(r"C:\aRIVERS\bMDVGA")

# 格式化字符串
# 适用性:在字符串中插入变量
# 语法:字符串%(变量)
# 占位符:原样输出%s  小数保留精度%.1f  整数保留位数%.2d
usd = 16
cny = usd * 7.0779
print("%s美元=%s人民币" % (usd, cny))
total_liang = 100
print("结果为:%s斤%s两" % (total_liang // 16, total_liang % 16))
print(f"结果为:{total_liang // 16}{total_liang % 16}两")
# "四舍五入"
print("%.1f" % 1.29456)
# 不足2位时,左侧用0填充
print("%.2d:%.2d" % (9,15))

6、练习

"""
    根据下列文字,提取变量,使用字符串格式化打印信息
    湖北确诊67802人,治愈63326人,治愈率93.40%
    70秒是01分零10秒
"""
region = "湖北"
confirmed = 67802
cure = 63326
print("%s确诊%s人,治愈%s人,治愈率%.2f%%" % (region, confirmed, cure, cure / confirmed * 100))
print(f"{region}确诊{confirmed}人,治愈{cure}人,治愈率{cure / confirmed * 100:.2f}%") #".2f"代表保留2位小数的浮点数格式。print(f"{region}确诊{confirmed}人,治愈{cure}人,治愈率{cure / confirmed * 100:.2f}%") #".2f"代表保留2位小数的浮点数格式。

number_second = 70
minute = number_second // 60
print("%s秒是%.2d分零%.2d秒" % (number_second, minute, number_second % 60))
print(f"{number_second}秒是{minute:02d}分零{number_second % 60}秒")

五、字符串序列

在这里插入图片描述

1、通用操作

"""
    通用操作
"""
# 数学运算符
# -- 拼接
print("悟空" + "八戒")
# -- 重复
print("悟空" * 2)
# 比较运算
# --依次比较两个容器中元素,一但不同则返回比较结果,比较后面字符一样的可以,但是后面字符不一样的就会根据前面的数字进行比较,不准确。
print("12w" > "16w")  # False
print("16k" > "12w")  # True
# 成员运算
# -- 判断元素是否在容器中
print("悟空" in "我是花果山孙悟空")  # True
print("空悟" in "我是花果山孙悟空")  # False
print("孙空" in "我是花果山孙悟空")  # False
print("孙空" not in "我是花果山孙悟空")  # True

小练习

"""
    在终端中获取一个整数,作为边长,打印矩形。
    $$$$$
    $   $
    $   $
    $   $
    $$$$$
"""
number = int(input("请输入整数:"))
# print("$" * number)
# for item in range(number - 2):
#     print("$%s$" % (" " * (number - 2)))
# print("$" * number)

for item in range(number):
    # 打印头尾
    if item == 0 or item == number - 1:
        print("$" * number)
    else:  # 打印中间
        print("$%s$" % (" " * (number - 2)))

2、索引Index

"""
    索引Index
        定位单个元素
        容器名[整数]
"""
message = "我是花果山水帘洞美猴王孙悟空"
print(len(message))  # 长度 14
# 正向索引
print(message[0])
print(message[1])
# print(messsage[len(messsage) - 1])
# print(messsage[99]) # 索引越界
# 反向索引
print(message[-1])
print(message[-2])
# print(messsage[-len(messsage)])

3、切片

"""
    切片
        定位多个元素
        容器名[整数:整数:整数]
"""
message = "我是花果山水帘洞美猴王孙悟空"
# 容器名[开始:结束:间隔]
# 注意:不包含结束
print(message[1:5:1])
# 容器名[开始:结束]
# 注意:间隔默认为1
print(message[1:5])
# 容器名[:结束]
# 注意:开始默认为头
print(message[:5])
# 容器名[:]
# 注意:结束默认为尾
print(message[:])
print(message[-3:])

message = "我是花果山水帘洞美猴王孙悟空"
# 花果山
print(message[2:5])
# 花果山水帘洞美猴王
print(message[2:-3])
# 洞帘水
print(message[-7:4:-1])
# 倒序
print(message[::-1])
# 空
print(message[5:2])
# 切片越界不报错
print(message[5:99])

小练习

"""
  字符串: content = "我是京师监狱狱长金海。"
  打印第一个字符、打印最后一个字符、打印中间字符
  打印字前三个符、打印后三个字符
  命题:金海在字符串content中
  命题:京师监狱不在字符串content中
  通过切片打印“京师监狱狱长”
  通过切片打印“长狱狱监师京”
  通过切片打印“我师狱海”
  倒序打印字符
"""
content = "我是京师监狱狱长金海。"
print(content[0])
print(content[-1])
print(content[len(content) // 2])
print(content[:3])
print(content[-3:])
print('金海' in content)
print('京师监狱' not in content)
print(content[2:-3])
print(content[-4:  1:  -1])
print(content[::3])
print(content[::-1])

六、列表list

1、概述

(1)何时用
在Python中可以使用列表,对日常生活中的大量数据进行管理
# 缺点:数据增加,变量就要增加
lj = "李健"
zjl = "周杰伦"
mby = "毛不易"
# 目标:使用一个变量,管理多个数据
(2)为何用

若没有列表类型,一个变量只能操作一个数据;手动为每个数据创建变量,无法动态添加数据

movie01 = "八角笼中"
movie02 = "封神第1部"
  ...   = "消失的她"
    
while True:
	movie = input("请输入电影名:")
    ...
(3)如何用
(1)定义:由一系列变量组成的可变序列容器
(2)语法:
	列表名 = [元素1,元素2,元素3]
(3)案例:
	list_movie = ["八角笼中","封神第1部","消失的她"]

2、基础操作

(1)创建、添加列表
"""
    列表list
        创建、添加
        擅长于存储单一维度数据
"""
# 创建
# -- 列表名 = [数据1,数据]
list_name = ["李健", "周杰伦", "毛不易"]
# -- 列表名 = list(容器)
list_lj = list("李健")

# 添加
# -- 追加:列表名.append(数据)
list_name.append("杨坤")
# -- 插入:列表名.insert(索引,数据)
list_name.insert(0,"张良")
print(list_name)
(2)定位元素
"""
    列表
        定位元素
"""
list_name = ["李健", "周杰伦", "毛不易"]
# 读取单个元素
print(list_name[0])
# 修改单个元素
list_name[0] = "贱贱"
# 读取多个元素
# --通过切片读取的原理:创建新容器
print(list_name[-2:])
# 修改多个元素
# --通过切片修改的原理:将右侧容器的元素依次存入左侧
list_name[-2:] = ["杰伦", "不易"]
# list_name[-2:] = 10 # 10是不可分割的整体
print(list_name)

小练习

在这里插入图片描述

# 练习1:
# 创建地区列表、新增列表、现有列表,累计列表分别存储3行(台湾、山西、浙江)信息
list_region = ["台湾", "陕西", "浙江"]
list_new = [16, 182, 2]
list_now = [2339, 859, 505]
list_total = [16931, 1573, 2008]
# 练习2:
# 向以上四个列表追加数据第4行(广西)信息
# 在第1个位置插入第5行(香港)信息
list_region.append("广西")
list_new.append(6)
list_now.append(256)
list_total.append(599)

list_region.insert(0, "香港")
list_new.insert(0, 9)
list_now.insert(0, 196)
list_total.insert(0, 12598)
# 练习3:
# 在地区列表读取前两个元素
# 在新增列表读取后三个元素
# 将现有列表所有元素设置为0
# 打印台湾疫情信息(xx地区新增xx人现有xx人)
print(list_region[:2])
print(list_new[-3:])
list_now[:] = [0] * len(list_new)
print(list_region)
print("%s地区新增%s人现有%s人" % (list_region[1], list_new[1], list_now[1]))
# 练习4:
# 在地区列表中删除“浙江”
if "浙江" in list_region:
    list_region.remove("浙江")
# 在新增列表中删除第1个元素
del list_new[0]
# 在现有列表中删除前2个元素
del list_now[:2]
# 在累计列表中删除全部元素
del list_total[:]
# 练习5:
# 打印地区列表元素(一行一个)
for item in list_region:
    print(item)
# 新增列表元素累加2
for i in range(len(list_new)):
    list_new[i] += 2
# 打印现有列表小于1000的元素
for item in list_now:
    if item < 1000:
        print(item)
# 累计列表小于2000的元素设置为0
for i in range(len(list_total)):
    if list_total[i] < 2000:
        list_total[i] = 0
(3)删除、遍历
"""
    列表
        删除、遍历
"""
list_name = ["李健", "周杰伦", "毛不易"]
# 删除
# --根据定位:del 容器名[索引或切片]
del list_name[1]
del list_name[:2]
list_name = ["李健", "周杰伦", "毛不易"]
# --根据元素:
if "李健" in list_name:  # 如果不知道是否具有该元素,先判断
    list_name.remove("李健")
print(list_name)
# 遍历
list_name = ["李健", "周杰伦", "毛不易"]
# -- 根据条件读取元素
# for item in 列表:
# 打印所有姓名是3个字的元素
for item in list_name:
    if len(item) == 3:
        print(item)
# for item in list_name:
#     if len(item) == 3:
#         item = "" # 修改的是变量item,与列表无关
# print(list_name)

# -- 根据条件修改元素
# for i in range(len(列表)):
for i in range(len(list_name)):  # 0 1 2
    if len(list_name[i]) == 3:
        list_name[i] = ""
print(list_name)
(4)小结
"""
    列表基础操作
        创建
            列表名 = [数据1,数据2]
            列表名 = list(容器)
        添加
            列表名.append(元素)
            列表名.insert(索引,元素)
        定位
            列表名[整数]
            列表名[整数:整数:整数]
        删除
            del 列表名[索引或切片]
            列表名.remove(元素)
        遍历
            for item in 列表名:
                if 条件:
                    print(item)

            for i in range(len(列表名)):
                if 条件:
                    列表名[i] = ?
"""

3、内存图

"""
    列表内存分布
"""
list_name = ["李健", "周杰伦", "毛不易"]
# 列表一份
data01 = list_name
data02 = list_name[0]
# 列表二份
data03 = list_name[-2:]
# 因为二份所以互不影响
data03[0] = "杰伦"
# 因为一份所以互相影响
data01[0] = "贱贱"
print(list_name) # ?

在这里插入图片描述

"""
    内存图
        创建
        定位
"""
list01 = ["北京", "上海"]
list02 = list01
list01[0] = "广东"
list03 = list01[:]
list03[-1] = "深圳"
print(list01)  # ?

在这里插入图片描述

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值