1、字符串
字符串是不可变的数据
原因:如果在原有内存中修改,很可能破坏其他数据的空间
现象:每次需要修改字符串时,都会创建新数据,替换变量中存储的地址
字符串字面值
(1)建议使用双引号
name01 = "悟空"
(2)冲突后使用单引号
name02 = '悟空'
(3)三引号,所见皆所得包括三单和三双,
print("""三 单 引号""")
转义字符:改变原有含义的特殊字符
print("我是\"花果山\"悟空") print("我是\n花果山") # 当引号中是文件位置时 # print("E:\aonth01\bay04-8月5日") # 或者 双斜杠 print("E:\\aonth01\\bay04-8月5日") #或者 加r,代表原始字符 print(r"E:\aonth01\bay04-8月5日")
格式化字符串
适用性:在字符串中插入变量 语法:字符串%(变量) 占位符:%s s代表str,原样输出 %.1f 保留一个小数,支持四舍五入 %.2d 保留两位整数,不足两位时,左侧用零填充print("%.1f" % 1.29456) ¥ 1.2 # 不足两位时,左侧用零填充 print("%.2d:%.2d" % (9,5)) # 09:05
2、序列
序列:由一系列字符组成的不可变序列容器,存储的是字符的编码值
字节:计算机存储的最小单位,等于8位bit,最大为十进制255。
字符:单个的数字,文字,符号
字符集:存储字符与二进制序列的对应关系(编码与解码,ASCII编码)
编码
ASCII编码:有100多字符,8个比特位最多可以表示255个字符,所以每个字符1个字节。
GBK编码:21003个中文,需要15个比特位全部表示,由于计算机中存储是以8个比特位为间隔,所以需要1个中文需要2个字节
一般情况下使用UTF-8编码。
3、通用操作
1、数学运算符
+ 拼接
* 重复
> < >= <= == 比较运算,比较编码值,依次比较两个容器中元素,一旦不同则返回比较结果
print("悟空"+"猴子") print("悟空" * 3) print("悟空" > "八戒") print("12w" == "16w") # 单位一致,进行比较 print('12W' == "1200000") # 单位不一致,结果错误
2、成员运算符
in,not in 判断元素是否在容器中
print("悟空" in "孙悟空")
编程练习:
"""
# 请输入整数:8
$$$$$$$$
$ $
$ $
$ $
$ $
$ $
$ $
$$$$$$$$
"""
# num = int(input("请输入数字:"))
# print("$"*num)
# for i in range(1,num-2):
# print("$"+" "*(num-2)+"$")
# print("$"*num)
# 优化
# """
num = int(input("请输入数字:"))
for i in range(num):
if i == 0 or i==num-1:
print("$" * num)
else:
print("$"+" "*(num-2)+"$")
3、索引
索引
定位单个元素,编号为0到len()-1
容器[整数]
正向索引
反向索引 len()-1等价于-1
0 等价于 -len()
4、切片
切片,越界不报错
定位多个元素
容器名[开始:结束:[间隔]],不包括结尾,间隔默认为1,可省略
容器名[开始:结束]
容器名[:结束],开始可以不写,默认为1,但冒号不能省略
容器名[:],开始和结束都可以不写,结束默认为尾,默认包括所有元素
容器名[-3:],倒数3个字符
4、列表
定义:使用一个变量,管理多个数据,擅长于处理单一维度数据
(1)创建
# 列表名 = [数据1,数据2] list_name = ["王丽","王红","丽红"] # 列表名= list(容器) list_lq = list("王丽") # 相当于类型转换
(2)添加(追加和插入)
## 添加 # 追加,只能放在末尾:列表名.append(数据) list_name.append("李红") # 插入:列表名.insert(位置,数据)
(3)定位元素,利用索引或者切片
list_name = ["王丽","王红","丽红"] # 读取单个元素 print(list_name[0]) # 修改单个元素 list_name[0] = "王丽丽" # 读取多个元素 # 通过切片读取的原理会创建新容器 print(list_name[-2:]) # 修改多个元素 # 通过切片修改的原理会将右侧容器元素依次存入左侧 list_name[-2:] = ["ww","ll"] print(list_name)
(4)删除元素:根据位置或根据元素值
list_name = ["王丽","王红","丽红"] ## 删除 # 根据定位删除:del 容器名[索引或切片] del list_name[1] print(list_name) del list_name[0:1] print(list_name) # 根据元素删除 # 如果不知道是否存在,先判断 # list_name.remove("丽丽") # 报错 if "理理" in list_name: list_name.remove("丽丽")
(5)遍历列表元素,全部遍历或者根据条件遍历
list_name = ["王丽丽","王红","丽红"] # 打印所有姓名是2个字的元素 for item in list_name: if len(item) == 2: print(item) # 将所有姓名是2个字的元素改为空字符串 # for item in list_name: 错误 # if len(item) == 2: # item = "" # 修改的是变量item,与列表无关 # print(list_name) for i in range(len(list_name)): if len(list_name[i]) == 2: list_name[i] = "" print(list_name)
(6)列表:内存分配
list_name = ["李琦","周义杰","毛绍祺"] # 列表一份 data01 = list_name data02 = list_name[0] # 切片会重新创建,列表二份 data03 = list_name[-2:] # 因为是两个列表,所以互不影响 data03[0] = "义杰" # 因为一份,所以互相影响 data01[0] = "琪琪" print(list_name)
画图举例1:
画图举例2:
自己画图: