python容器

五、 数据容器

一个数据容器可以容纳多份数据

5.1、列表list

  • 以 [ ] 作为标识,有序存储,存和取的顺序一样

  • 列表内每一个元素之间用逗号隔开

  • 允许重复数据存在

  • 可以修改(增删改查)

# 字面量定义列表
[元素1,元素2,元素3,元素4,元素5,······]
​
# 变量定义列表
变量名称 = [元素1,元素2,元素3,元素4,元素5,······]
​
# 定义空列表
变量名称 = []
变量名称 = list()
​
# 嵌套列表的定义
变量名称 = [[元素1,元素2],元素3,[元素4,元素5,元素6]]
​
# 注意:变量名称相当于列表名

注意:列表可以存储多个数据,可以存储不同的数据类型,支持嵌套

列表的下标索引:列表中的每一个元素都有一个编号,称之为下标索引

  • 从前向后:编号从0开始依次递增

  • 从后向前:编号从-1开始依次递减

注意:下标索引不能超出范围,超出范围就会报错

语法:列表名称 [下标索引]

# 定义列表
my_list = ["python","java","c","c++"]
​
# 通过索引取出元素(可以使用变量接收,也可以直接打印)
value = my_list[0]
print(value)        # 结果为:python
print(my_list[2])     # 结果为:c
​
# 通过反向索引取出元素
print(my_list[-1])      # 结果为:c++
print(my_list[-3])      # 结果为:java
# 定义嵌套列表
my_list = [[1,2,3],4,5,[6,7,8,9]]
​
# 取出数字3
print(my_list[0][2])
​
# 取出列表中最后一个元素
print(my_list[-1])      # 结果为:[6,7,8,9]

5.2、列表常用方法

  • 查找元素下标-->调用index()方法

    # 语法:列表名.index(查找的元素)
    mylist = ["java","python","c","c++"]
    ​
    # 查找元素C的下标
    index = mylist.index("c")
    print(index)      # 结果为:2
  • 修改索引位置的元素值-->列表名[下标]

    # 语法:列表名[下标] = 值
    mylist = ["java","python","c","c++"]
    ​
    # 正向下标
    mylist[0] = "js" 
    print(mylist)     # 结果为:["js","python","c","c++"]
    ​
    # 反向下标
    mylist[-3] = "go"
    print(mylist)     # 结果为:["js","go","c","c++"]
  • 插入元素---->调用insert()方法

    # 语法:列表名.insert(下标,元素)-->在指定下标位置插入指定元素
    mylist = ["java","python","c","c++"]
    ​
    # 插入元素
    mylist.insert(1,"go")
    print(mylist)     # 结果为:["java","go","python","c","c++"]
  • 追加单个元素--->调用append()方法

    # 语法:列表名.append(元素)-->将指定元素追加到列表尾部
    mylist = ["java","python","c","c++"]
    ​
    # 追加元素
    mylist.append("go")
    print(mylist)     # 结果为:["java","python","c","c++","go"]
  • 追加一批元素-->调用extend(其他数据容器)

    # 语法:列表名.extend(其他容器)-->将其他容器的内容取出,依次追加到列表尾部
    mylist_1 = ["java","python"]
    mylist_2 = ["go","c++","c"]
    ​
    # 追加一批元素
    mylist_1.extend(mylist_2)
    print(mylist_1)     # 结果是:["java","python","go","c++","c"]
  • 删除元素-->调用pop()方法或者使用del关键字

    # 语法1:del 列表名[下标]
    # 语法2:列表名.pop(下标)-->不仅可以删除,还可以返回被删除的元素
    mylist = ["java","python","c","c++","go"]
    ​
    # 方式1
    del mylist[2]
    print(mylist)     # 结果为:["java","python","c++","go"]
    ​
    # 方式2
    mylist.pop(0)
    print(mylist)     # 结果为:["python","c++","go"]
    
  • 删除元素第一匹配项-->调用remove()方法

    # 语法:列表名.remove(要删除的元素)
    mylist = ["java","python","java","c","c++","go"]
    ​
    # 删除元素java
    mylist.remove("java")
    print(mylist)     # 结果为:["python","java","c","c++","go"]
  • 清空列表-->调用clear()方法

    # 语法:列表名.clear()
    mylist = ["java","python","java","c","c++","go"]
    ​
    # 清空列表
    mylist.clear()
    print(mylist)     # 结果为:[]
  • 统计指定元素在列表中的数量-->调用count()方法

    # 语法:列表名.count(要统计的元素)
    mylist = ["java","python","java","c","c++","go"]
    ​
    #统计java的个数
    count = mylist.count("java")
    print(count)      # 结果为:2
  • 统计列表内总共的元素个数-->使用len()函数

    # 语法:len(列表名)
    mylist = ["java","python","java","c","c++","go"]
    ​
    # 统计总数
    num = len(mylist)
    print(num)        # 结果为:6

5.3、列表的遍历

1)while循环遍历-->结束条件为:下标值小于列表的元素数量

# 定义变量表示下标
index = 0
while index < len(列表名称):
    # 依次取出列表元素
    变量名 = 列表[index]
    index += 1

2)for循环遍历

"""语法:
  for 临时变量 in 数据容器:
      对临时变量进行处理
"""
# 定义数据容器
mylist  = [1,2,3,4,5]
# 遍历
for i in mylist:
    print(i)

3)enumerate遍历

# 与for遍历相同,不同的就是可以操作下标和元素----enumerate(容器名)
mylist  = [1,2,3,4,5]
# 遍历
for index,value in enumerate(mylist):
    print(f'下标为{index}的元素为{value}')

5.4、元组tuple

元组和列表一样,都可以封装多个,不同类型的元素在内,但最大的不同点在于:元组一旦定义完成,就不能修改

1)元组的定义:定义元组使用小括号,数据用逗号隔开,数据可以是不同类型的,也支持嵌套和列表用法相同

# 定义元组字面量
(元素1,元素2,元素3,······,元素n)
​
#定义元组变量
变量名称 = (元素1,元素2,元素3,······,元素n)
​
# 定义空元组
变量名称 = ()
变量名称 = tuple()
  • 注意1:元组只有一个数据时,这个数据后面要有逗号,否则不是元组类型,是字符串

  • 注意2:元组的遍历和列表的遍历相同

  • 注意3:不能改变元组中的数据,否则会报错(assignment)

  • 注意4:如果元组中嵌套列表,可以修改列表中的内容

5.5、元组的常用方法

和列表的方法相同,只是元组不能修改数据,所以没有修改的方法

1)查找元素下标-->通过index()方法

# 语法:元组名.index(要查找的元素)
my_tuple = ("java","python","java","c","c++","go")
​
# 查找元素c的下标
print(my_tuple.index("c"))    # 结果为:3

2)统计元组中指定元素个数-->调用count()方法

# 语法:元组名.count(要统计的元素)
my_tuple = ("java","python","java","c","c++","java","go")
​
# 统计元素java的个数
count = my_tuple.count("java")
print(count)    # 结果为:3

3)统计总个数-->使用len()函数

# 语法:len(元组名称)
my_tuple = ("java","python","java","c","c++","java","go")
​
# 统计总个数
print(len(my_tuple))    # 结果为:7

5.6、字符串常用方法

注意:字符串和元组一样也是一个无法修改的数据容器

1)通过下标索引取值

# 定义字符串
my_str = "irjifhi"
​
# 通过下标索引取值
value = my_str[1]
print(value)    # 结果为:r

2)查找下标索引-->调用index()方法

# 语法:字符串名.index(要查找的字符串)
my_str = "iuyr and jipr"
print(my_str.index("and"))    # 结果为:5

3)字符串的替换-->调用replace()方法

# 语法:字符串名.replace(字符串1,字符串2)-->将字符串1替换为字符串2
my_str = "iuyr and jipr and koj"
print(my_str.replace("and","or")) # 结果为:iuyr or jipr or koj

注意:replace方法不是修改字符串本身,而是得到了一个新的字符串

4)字符串的分割-->调用split()方法

注意:字符串本身不变,而是得到了一个列表对象

# 语法:字符串名.split(分割符字符串)
# 功能:按照指定的分割符字符串,将字符串分为多个字符串,并存入列表对象中
my_str = "iuyr and jipr and koj"

# 按照空格进行分割
my_str_list = my_str.split(" ")
print(my_str_list)    # 结果为:['iuyr', 'and', 'jipr', 'and', 'koj']
 

5)字符串的规整-->调用strip()方法,得到一个新的字符串

  • 语法1:字符串名.strip()--->空参表示去前后空格和换行符

  • 语法2:字符串名.strip(字符串)--->表示去前后指定字符串

# 去前后空格
my_str = " jidj and joej "
print(my_str.strip())   # 结果为:jidj and joej
​
# 去前后指定字符串
my_str = "12jiajo and jokerk21"
print(my_str.strip("12"))   # 结果为:jiajo and jokerk
## 注意:传入的是"12"其实就是"1"和"2"都会移除,是按单个字符移除

注意:去前后指定字符串时,传入的字符串是按照单个字符移除

6)统计指定字符串个数-->调用count()方法

7)统计字符串长度-->调用len(字符串名)函数

8)字符串的遍历---->和元组、列表相同

  • 内置函数遍历:iter()方法

my_str = " jidj and joej "
for x in iter(my_str):
    print(x)
  • enumerate()方法遍历----可以获取到下标和值

for index 值 in enumerate(容器名):

9)判断字符串是否全由数字组成---->str.isdigit(名称)方法

my_str = " 243343 and joej "
print(str.isdigit(my_str))          # 结果为;False

10)判断字符串是否全由字母组成----->str.isalpha(名称)

my_str = " eref and joej "
print(str.isalpha(my_str))          # 结果为;True

11)忽略大小写-----忽略大写:str.upper(),忽略小写:str.lower()

5.7、序列的切片

序列指:内容连续,有序,可使用下标索引的一类数据容器,列表,元组,字符串均可以认为是序列,序列支持切片操作

切片语法:序列名[起始下标:结束下标:步长]--->表示从序列中指定位置开始,到指定位置结束,得到一个新序列

  • 起始下标可以留空,表示从头开始

  • 结束下标(不含)可以留空,表示截取到结尾

  • 步长表示依次取元素的间隔

    • 步长1表示:一个个取元素

    • 步长2表示:每次跳过一个元素取

    • 步长n表示:每次跳过n-1个元素取

    • 步长为负值:表示反向取(起始下标和结束下标也要反向标记)

注意:切片操作不影响序列本身,而是产生一个新的序列

# 语法:序列名[起始下标:结束下标:步长]--->包前不包后,步长为1可以省略
​
# 定义列表序列
my_list = [1,2,3,4,5,6,7]
​
# 取出子序列[2,3,4,5,6]
new_my_list = my_list[1:6:1]
print(new_my_list)      # 结果为:[2,3,4,5,6]
​
# 从头到尾步长为2取出元素
print(my_list[::2])     # 结果为:[1,2,3,7]
​
# 反向切片(翻转)
print(my_list[::-1])    # 结果为:[7,6,5,4,3,2,1]
​
# 反向取出[5,4,3]---》起始下标 > 结束下标
print(my_list[4:1:-1])    # 结果为:[5,4,3]

5.8、集合set

序列都支持重复元素且有序,而集合主要的特点是:不支持重复元素(自带去重功能)并且内容无序(存和取的顺序不一样)

  • 列表使用:[ ]

  • 元组使用:( )

  • 集合使用:{ }

# 定义集合字面量
{元素1,元素2,元素3,······,元素n}
​
# 定义集合变量
变量名称 = {元素1,元素2,元素3,······,元素n}
​
# 定义空集合
变量名称 = set()

注意:集合是无序的,不支持下标索引访问,但集合(不是序列)和列表一样支持修改元素

5.9、集合的常用操作

1)添加元素-->调用add()方法

# 语法:集合名.add(要添加的元素)--->将指定元素添加到集合中
my_set = {"jijri","虾米",12}
​
# 添加元素(集合本身被修改)
my_set.add("python")
print(my_set)     # 结果为:{'虾米', 'python', 12, 'jijri'}

2)移除元素-->调用remove()方法

# 语法:集合名.remove(要移除的元素)--->将指定的元素从集合中移除
my_set = {'虾米', 'python', 12, 'jijri'}
​
# 移除元素
my_set.remove(12)
print(my_set)     # 结果为:{'虾米', 'python', 'jijri'}

3)从集合中随机取出一个元素 -->调用pop()方法

# 语法:集合名.pop()--->从集合中随机取出一个元素
# 注意:pop()方法在序列中是删除下标索引元素,并且返回删除的元素,这里是取出,同时集合本身被修改,元素被移除
my_set = {'虾米', 'python', 12, 'jijri'}
​
# 取出元素
element = my_set.pop()
print(element)    # 结果为:集合中的随机一个元素
print(my_set)   # 结果为:去除集合中随机一个元素,剩余的全部元素

4)清空集合--->调用clear()方法

5)取出两个集合的差集-->调用difference()方法

  • 取出集合1和集合2的差集(集合1有而集合2没有的)得到一个新集合,集合1和集合2不变

# 语法:集合1.difference(集合2)
set_1 = {1,2,3,4,5,6}
set_2 = {2,4,5,6}
​
# 取差集
new_set = set_1.difference(set_2)
print(new_set)      # 结果为:{1, 3}

6)消除集合的差集-->调用difference_update()方法

  • 在集合1内,删除和集合2相同的元素,集合1被修改,集合2不变

# 语法:集合1.difference_update(集合2)
set_1 = {1,2,3,4,5,6}
set_2 = {2,4,5,6}
​
# 消除差集
set_1.difference_update(set_2)
print(set_1)      # 结果为:{1,3}
print(set_2)      # 结果为:{2, 4, 5, 6}

7)合并两个集合-->调用union()方法

  • 将集合1和集合2合并,得到一个新集合,集合1和集合2不变

# 语法:集合1.union(集合2)
set_1 = {1,2,3,6}
set_2 = {2,4,5,6}
​
# 合并集合
new_set = set_1.union(set_2)
print(new_set)      # 结果为:{1,2,3,4,5,6}

8)统计集合中元素数量-->使用len(集合名)

9)集合的遍历--->集合不支持下标索引,不能使用while循环,可以使用for循环

5.10、字典dict

1)字典的定义:使用{ },存储的元素是一个个的键值对

  • 字典的key不能重复---key重复时value会被新的覆盖

  • key和value之间用冒号隔开

# 定义字典字面量
{key:value,key:value,······,key:value}
​
# 定义字典变量
my_dict = {key:value,key:value,······,key:value}
​
# 定义空字典
my_dict = {}
my_dict = dict()

2)字典数据的获取--->无下标索引

# 语法:字典名[key]-----》可以获取到对应的value
stu_age = {"小明":23,"小张":20,"虾米":18}
​
# 获取数据
age = stu_age["小明"]
print(age)          # 结果为:23
print(stu_age["虾米"])    # 结果为:18

3)字典可以嵌套

字典可以存储任意类型的数据,但是key值不能嵌套字典

# 定义字典,嵌套其他数据容器
my_score_dict = {"小明":{"语文":90,"英语":60,"数学":88},
                 "虾米":{"语文":89,"英语":70,"数学":85}}
​
# 取出虾米的英语成绩
english_score = my_score_dict["虾米"]["英语"]
print(english_score)    # 结果为:70

5.11、字典的常用操作

1)新增元素

注意:如果新添加的元素的key值在字典中存在,就是更新元素(更新value值)

# 语法:字典名[key] = value
stu_age = {"小明":23,"小张":20,"虾米":18}
​
# 添加元素
stu_age["张三"] = 19
print(stu_age)      # 结果为:{'小明': 23, '小张': 20, '虾米': 18, '张三': 19}
​
# 更新元素
stu_age["小明"] = 20    
print(stu_age)      # 结果为:{'小明': 20, '小张': 20, '虾米': 18, '张三': 19}

2)删除元素--->返回对应的value值

# 语法:字典名.pop(key)
stu_age = {"小明":23,"小张":20,"虾米":18}
​
# 删除
age = stu_age.pop("小明")
print(age)        # 结果为:23
print(stu_age)      # 结果为:{"小张":20,"虾米":18}

3)清空字典

# 语法:字典名.clear()
stu_age = {"小明":23,"小张":20,"虾米":18}
​
# 清空字典
stu_age.clear()
print(stu_age)      # 结果为:{}

4)获取全部key

# 语法:字典名.keys()--->得到字典中的全部key
stu_age = {"小明":23,"小张":20,"虾米":18}
​
# 获取key
keys = stu_age.keys()
print(keys)     # 结果为:dict_keys(['小明', '小张', '虾米'])

5)字典的遍历-->无下标索引不能使用while循环

# 方法1:通过获取全部key进行遍历
stu_age = {"小明":23,"小张":20,"虾米":18}
# 获取key
keys = stu_age.keys()
for key in keys:
    print(f"字典的key是:{key},对应值为{stu_age[key]}")
​
# 方法2:直接通过for循环遍历
for key in stu_age:
    print(f"字典的key是:{key},对应值为{stu_age[key]}")
    
# 方法3:使用items()方法获取每一对key和value
for key,value in stu_age.items():
    print(f"key是{key},值为{value}")

6)获取字典中元素数量---->len(字典名)

7)去掉字符串格式:eval(str))

print(eval('[*"123"]'))         # 结果为:['1', '2', '3']
print(eval('["123"]'))          # 结果为:['123']
print(eval('{"a":1}'))          # 结果为:{'a': 1}
print(eval('{"a":1,"b":"2"}'))  # 结果为:{'a': 1, 'b': '2'}
print(eval("[{'id': '12', 'name': '张三'}]")) # [{'id': '12', 'name': '张三'}]

8)获取键对应的值:get('key')

# 方法1:值 = 字典名["键"]-------没有对应的键会报错
value = 字典名["key"]
# 方法2:字典名.get('key')-----key不存在返回None
value = 字典名.get('key')

5.12、容器的通用操作

  • max(容器名)显示容器中最大的值

  • min(容器名)显示容器中最小的值

  • 将给定容器转换为列表:list(容器名)

  • 将给定容器转换为字符串:str(容器名)或空字符串.join(容器名)

  • 将给定容器转换为元组:tuple(容器名)

  • 将给定容器转换为集合:set(容器名)

通用排序功能:sorted(容器名,[reverse = False])--->reverse默认为False,从小到大,如果需要翻转就传入True,从大到小,注意:排序之后会转为列表

# 定义容器
my_tupe = (2,4,5,7,1,3)
​
# 从小到大
print(sorted(my_tupe))      # 结果为:[1, 2, 3, 4, 5, 7]
​
# 从大到小
print(sorted(my_tupe,reverse=True))   # 结果为:[7, 5, 4, 3, 2, 1]

列表sort方法:列表名.sort(key=选择排序依据的函数(方法),reverse = True或False)

  • 注意:sorted方法无法指定排序规则,的列表嵌套是就无法使用

  • 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据,参数reverse,表示是否翻转排序结果

# 定义嵌套列表
my_list = [["a",11],["c",44],["b",22],["d",33]]
​
# 定义排序方法
def 方法名(element):
    # 拿到每一个元素,按照元素嵌套中的下标1为比较对象
    return element[1]
​
# 调用sort方法排序
my_list.sort(key = 方法名,reverse=True)

zip()联合方法:将两个容器对应的值联合起来,返回一个迭代器,遍历出来的格式为元组

mylist  = [1,2,3,4,5]
mytroup = ("ni",'er','wre','ere','wew')
# 使用zip将对应下标的值组成元组
a = zip(mylist,mytroup)
for i in a:
    print(i)
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值