python容器及应用

系列文章目录

python基础

文章目录

  • python基础
  • 前言
  • 一、字符串str
  • 二、容器的通用操作
  • 三、列表list
  • 四、元组tuple
  • 五、字典dict
  • 六、集合set
  • 七、固定集合frozenset
  • 总结


前言

作为一门优秀的面向对象编程语言,python很值得我们学习,想要入门python,第一部分就需要掌握python基础

一、字符串

1.定义:由一系列字符组成的不可变序列容器,存储的是字符的编码值

2.编码:字节byte:计算机最小存储单位,等于8位bit  b,kb,mb,g,t

字符:单个的数字,文字与符号

字符集(码表):存储字符与二进制序列的对应关系

编码:将字符转换为对应的二进制序列的过程

解码:将二进制序列转换为对应的字符的过程

编码方式:--ASCII编码:包含英文、数字等字符,每个字符一个字节

--GBK编码:兼容ASCII编码,包含21003个中文;英文1个字节,汉字2个字节

--Unicode字符集:国际统一编码,旧字符集每个字符2字节,新字符集4字节

--UTF-8编码:Unicode的存储与传输方式,英文1字节,中文三字节

3.相关函数:ord(字符串):返回该字符串的Unicode码

chr(整数):返回该整数对应的字符串

4.str字面值:@1表示方式:字符串可加单引号,双引号,三引号 eg:'苏大强',"苏大强","'苏大强"'

其中单引号与双引号可以嵌套使用 eg:message = "我叫'苏大强'。"

@2转义字符:作用:改变原始字符含义   \n(换行符)  \t(水平制表格)  

a = r"c:\newfile\test.py"(取消转义)

5.在字符串中插入变量

eg:str02 = "请输入%s+%s=?" % (a,b)


二、容器通用操作

一、数学运算符

1.+:用于拼接两个容器

2.+=:用原容器与右侧容器拼接,并重新绑定变量

3.*:重复生成容器元素

4.*=:用原容器生成重复元素,并重新绑定变量

5.<,<=,...!=:依次比较两个容器中的元素,一但不同返回布尔值(比较运算符)

二、成员运算符

in:判断一个容器是否属于另一个容器

print("我叫"in"我叫齐天大圣")#输出结果为True

三、索引与切片

1.正向索引

eg:我[0]叫[1]齐[2]天[3]大[4]圣[5]

2.反向索引

eg:我[-6]叫[-5]齐[-4]天[-3]大[-2]圣[-1]

3.切片

作用:从容器中取出相应的元素重新组成一个容器

语法:容器[(开始索引):(结束索引)(:(步长))]

说明:小括号()括起来的部分可以省略

message = "我叫齐天大圣"
print(message[0:2])#我叫
# 开始值默认为开头
print(message[:2])#我叫
# 结束值默认为末尾
print(message[-2:])#大圣
print(message[:])#我叫齐天大圣
print(message[-2:-5:-1])#大天齐
print(message[::-1])#圣大天齐叫我
print(message[1:1])#空

三、列表

一、定义:

由一系列变量组成的可变序列容器

二、创建列表

list01 = []

list01 = list()

#空列表

list02 = ["悟空",100,True]

list02 = list("我是齐天大圣")#将字符串转换为列表

三、获取元素

索引:print(list02[2])#齐

切片:print(list02[-4:])#['齐','天','大','圣']

添加元素:1.追加(在末尾添加)eg:list02.append("八戒")

2.插入(在指定位置添加)eg:list02.insert(1,True)在索引为1 的位置添加True

删除元素:1.根据元素删除  eg:list02.remove("是")

2.根据位置删除 eg:del list[0] 删除元素“我” 

定义元素目的:可以通过切片增删改查元素

eg: del list02[1:3] (通过切片删除多个元素)

list_favor = []#创建一个空列表

while True:
    str_favor = input("请输入你喜欢的人物:")
    if str_favor == "":
        break#当输入空字符串时,则跳出循环
    list_favor.append(str_favor)#将输入的人物名称添加进列表中

for item in list_favor:
    print(item)#顺序输出列表中的元素

四、容器内建函数

min(容器):返回容器最小值

max(容器):返回容器最大值

sum(容器):返回容器中所有值之和

len(容器):返回容器大小

list_score = []

while True:
    str_score = input("请输入学生成绩:")
    if str_score == "":
        break
    list_score.append(int(str_score))

print("最高分为:"+str(max(list_score)))
print("最低分为:"+str(min(list_score)))
print("平均分为:"+str(sum(list_score) / len(list_score)))

五、列表内存图

和

 注解:list01与list02指向的是同一块内存空间

六、深拷贝与浅拷贝

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

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

import copy#导入copy类

list01 = [800, [1000, 500]]#创建二维列表
list02 = copy.deepcopy(list01)#深度拷贝,将list01的内存全部拷贝
list01[1][0] = 900
print(list02[1][0])#输入结果为1000,不受list01[1][0]的影响
list01 = [800, [1000, 500]]
list02 = list01[:]#浅拷贝,也可以写成list01.copy()
list01[1][0] = 900
print(list02[1][0])#输出结果为900,浅拷贝只复制了第一层变量

七、列表与字符串对比

1.列表转换为字符串

list_temp = []
for item in range(10):
    list_temp.append(str(item))
# join:list-->str
result = " ".join(list_temp)#用空格键将列表中元素隔开
print(type(result))
print(result)

2.字符串转换为列表

#练习:英文单词翻转
#“How are you”-->"you are How"
str01 = "How are you"
list_temp = str01.split(" ")
str_result = " ".join(list_temp[::-1])
print(str_result)

八、列表推导式

list01 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list02 = [item + 1 for item in list01]#将list01中元素加1
print(list02)

list03 = [item + 1 for item in list01 if item > 5]将list01中的大于5的元素加1
print(list03)

四、元组

一、定义

1.由一系列变量组成的不可变序列容器

2.不可变是指一旦创建,不可以再添加/删除/修改元素

注意:元组与列表本质上的区别在于是否可变,列表在创建时系统会为其

预留一块空间,形象一点说就是学校分配一个十人间的寝室,住一个人或

者两个人都可以,而列表有自动扩容机制,当超过十个人时,学校就会分

配一个更大的寝室;而元组则不同,有三个人需要入住,学校就只分配三

个人的空间,无自动扩容机制,所以就不能对其进行添加/删除/修改元素

3.列表扩容原理:列表都会预留空间,当预留空间不足时,会再创建新列

表(开一个更大的空间),将原有数据拷贝到新列表中

二、元组的基础操作

1.创建元组

tuple01 = ()#创建一个空元组

tuple01 = (1,2,3)#创建一个具有默认值的元组

2.获取元素(索引,切片)

3.遍历元素

三、元组的作用

1.元组与列表都可以存储一系列变量,由于列表会预留内存空间

2.元组会按需分配内存,所以如果变量数量固定,建议使用元组

3.应用:

变量交换的本质就是创建元组:x,y = y,x

格式化字符串的本质就是创建元组:“姓名:%s,年龄:%d” %("孙悟空",20)

#日期转天数练习
count = 0
tuple01 = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
tuple02 = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入日期:"))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    for item in range(month - 1):
        count += tuple02[item]
    count += day
    print(count)
else:
    for item in range(month - 1):
        count += tuple01[item]
    count += day
    print(count)

五、字典

一、定义

1.由一系列键值对组成的可变映射容器

2.映射:一对一的对应关系,且每条记录无序

3.键必须唯一且不可变(字符串/数字/元组),值没有限制

二、基本操作

1.创建

dict01 = {} dict01 = dict()#空

dict01 = {"wj":100}

dict01 = dict([("a","b"),("c","d")])#将元组转换为字典

2.查找元素(根据key查找value)

print(dict01["a"])

3.修改元素(之前存在key)

dict01["a"] = "BB"

4.添加(之前不存在key)

dict01["e"] = "f"

5.删除

del dict01["a"]

6.遍历(获取字典中所有元素)

for key in dict01:

        print(key)#打印的是键

        print(dict01[key])#打印的是值

for value in dict01.values():#遍历字典,获取value

        print(value)

for item in dict01.items():#遍历字典,获取键值对key,value

        print(item)        

#商品信息录入及打印练习
dict_good = {}

while True:
    name = input("请输入商品名称:")
    if name == "":
        break
    price = int(input("请输入商品单价:"))
    dict_good[name] = price

for key, value in dict_good.items():
    print("%s的单价为%d元" % (key, value))
#学生信息录入及打印
dict_stu = {}
list_stu = []

while True:
    name = input("姓名为:")
    if name == "":
        break
    age = int(input("年龄为:"))
    score = float(input("成绩为:"))
    sex = input("性别为:")
    dict_stu[name] = [age, score, sex]

for key, value in dict_stu.items():
    print("姓名为:"+key)
    print("年龄为%d 成绩为%f 性别为%s" % (value[0], value[1], value[2]))

三、字典推导式

六、集合

一、定义

1.由一系列不重复的不可变类型变量组成的可变映射容器

2.相当于只有键没有值的字典(键则是集合的数据)

3.python中的集合与数学上集合的意义相当,具有无序,不重复性,还有交,并,补运算

二、基础操作

1.创建空集合:

集合名 = set()

集合名 = set(可迭代对象)

2.创建具有默认值集合:

集合名 = {1,2,3}

集合名 = set(可迭代对象)

3.添加元素:

集合名.add(元素)

4.删除元素:

集合名.discard(元素)

集合名.remove(元素)

5.获取所有元素:

for item in set02:

        print(item)

6.数学运算:

 

七、固定集合

一、定义

不可变的集合

二、作用

固定集合可以作为字典的键,还可以作为集合的值


总结

以上就是今天要讲的内容,本文介绍了python中的各种容器及其应用,其中列表是重点,这是python基础部分中较为重要的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无为之境~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值