Python之路-(列表元组字典集合)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路-(列表元组字典集合)相关的知识,希望对你有一定的参考价值。

一、列表

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

Python有6个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型

 #取值、切片

names = ["zhangsan","lisi","wangwu","chenliu"]

print (names)                #取所有列值
print (names[0],names[2])    #取值
print (names[0:3])           #切片,第一个值至第三个值
print (names[:3])            #0不写默认是0,切片,第一个值至第三个值
print (names[-1])            #取最后的值或者倒数第一个-2就是倒数第二个
print (names[-3:-1])         #倒数从左往右取值,顾首不顾尾

#添加、插入、修改、删除、查找、统计

#添加
names.append("xiaqi")        #在最后面添加一个值
#插入
names.insert(1,"caoba")      #在1的后面插入一个值,一定要输入在哪个值后面插入
#修改
names[2] ="xiaowang"        #在下标为2修改值,根据下标修改值
#删除
1、根据值删除
names.remove("caoba") 
2、根据下标删除
del names[1]
3、删除最后一个
names.pop()    #删除最后一个,输出下标就删除下标 跟这个一样 del names[-1]
#查找下标
print(names.index("zhangsan"))  #找值的下标
print(names [names.index("zhangsan")] )  # 查找下标后打印下标内容
#统计
print(names.count("chenliu"))  #统计相同的值数量

#清空列表、翻转列表、排序列表、扩展列表

#清空列表
names.clear() 
#翻转列表
number=[1,2,3,4,5,1,1]
number.reverse()
print(number)
[1, 1, 5, 4, 3, 2, 1]
#排序列表
number=[1,2,3,4,5,1,1]
number.sort()
#扩展列表
names2 = [1,2,3,4]
names.extend(names2)

#浅复制列表

names=[zhangsan,lisi,wangwu]
names2 = names.copy()
print(names)
print(names2)
[zhangsan, lisi, wangwu]
[zhangsan, lisi, wangwu]

names=[zhangsan,lisi,wangwu,[jonny]]
names2 = names.copy()
print(names)
print(names2)
[zhangsan, lisi, wangwu, [jonny]]
[zhangsan, lisi, wangwu, [jonny]]

names[2] = 王五
names [3] [0] = JONNY
print(names)
print(names2)   #name2 只复制第一层的列表,不会复制第二层列表,也就是子列表
 
[zhangsan, lisi, 王五, [JONNY]]     #names 修改的是第二层,然后wangwu变成了中文也是第二层
[zhangsan, lisi, wangwu, [JONNY]]   #但是names2是复制第一层,所以第一层是没有中文的王五,而jonny被改成了大写也是因为不复制,第二层也就是子列表。


浅复制的三种方式:
import copy
person=[name,[a,100]]

p1=copy.copy(person)
p2=person[:]
p3=list(person)

#深复制列表

import copy
names=[zhangsan,lisi,wangwu,[jonny]]
names2 = copy.deepcopy(names)
print(names)
print(names2)
names[2] = 王五
names [3] [0] = JONNY
print(names)
print(names2)

[zhangsan, lisi, wangwu, [jonny]]
[zhangsan, lisi, wangwu, [jonny]]
[zhangsan, lisi, 王五, [JONNY]]
[zhangsan, lisi, wangwu, [jonny]]

 

二、元组

元组与列表类似,元组一旦创建即不可修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

Names=(name,jonny)

只有两种方法:

1、index 查找下标

2、count 统计

 

三、字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

#创建一个新字典,同时赋值。

c = dict.fromkeys([6,7,8],[1,{name:alex},444])   
print(c)
c[7][1][name]=Jack Chen   #会直接修改连接地址,所有name值全部都会修改。
print(c)
{8: [1, {name: alex}, 444], 6: [1, {name: alex}, 444], 7: [1, {name: alex}, 444]}
{8: [1, {name: Jack Chen}, 444], 6: [1, {name: Jack Chen}, 444], 7: [1, {name: Jack Chen}, 444]}

#修改、查、删除

#修改,存在则修改,不存在则创建
info = {
    stu1101: zhang san,
    stu1102: li si,
    stu1103: wang wu,
}
b = {
    stu1101: xiaxia,   #对应info的key stu1101值不一样,则被修改
    1:3,    #无对应key 则新增
    4:2     #无对应key 则新增
}
info.update(b)   #修改info字典,对应的key有值就修改,无则新增
print(info)
{1: 3, stu1101: xiaxia, 4: 2, stu1102: li si, stu1103: wang wu}
#
print(info.get(stu1101))  #如果没有该key 则返回None。
print(info[stu1101])       #直接打印key的值
#删除1
del info[stu1101]
#删除2
info.pop(stu1104)
#随机删除
info.popitem() #随机删除一个元素

#多级嵌套

school = {
    "大学":{
        "www.nanjingdaxue.com": ["做夢吧","要求分数高"],
        "www.zhongshandaxue.com": ["醒醒吧","要求分数高"],
        "qinghuadaxue.com": ["不可能的","要求分数高"],
        "beijingdaxue.com":["难进","要求分数高"]
    },
    "高中":{
        "sihui":["轻松","收费低"]
    },
    "初中":{
        "weizheng":["容易","免费"]
    }
}
#修改
school[高中][sihui][1] = 毫不費力 
#只打印key 
print(school.keys())
#只打印值
print(school.values())
#嵌套循环打印
for  i in school:
    print(i,school[i])

#字典转换列表

#把字典转换为列表
print(info.items())  
#字典转列表然后再循环
for k,v in info.items():
    print(k,v)

四、集合

集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素。

可以使用大括号({})或者 set()函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

list_1 = [1,1,3,4,5,6]
list_1 = set(list_1)
#打印类型
print(list_1,type(list_1))  
list_2 = set([2,3,4,7,9]) 
print(list_2)
print(list_1,list_2)
#交集 .intersection 
print(list_1.intersection(list_2))  #取出交集
#并集 .union
print(list_1.union(list_2))  #去重合并
#差集 .difference
print(list_1.difference(list_2))  #保留list_1里面有的list_2里面没有的
#子集 .issubset
list_3 = set([1,3,4])
print(list_3.issubset(list_1))   #list_1 包含list_3 的所有值,则返回Ture
print(list_1.issuperset(list_3))  # 返回Flase
#对称差集 .symmetric_difference
print(list_1.symmetric_difference(list_2))   #把相互都没有的值取出来
#对比是否有交集,没有为True,有则False
list_4 = set([5,6,7])
print(list_3.isdisjoint(list_4))  #没有交集为True
集合符号:
#交集
print(list_2 & list_3)
#并集
print(list_2 | list_3)
#求差集
print(list_2 - list_3)
#对称差集
print(list_2 ^ list_3)
#添加
list_1.add(999)
print(list_1)
#添加多项
list_4.update([888,999,111])
#删除一项
list_4.remove(999)
#集合长度
print(len(list_4))
#判断是不是成员
print(111 in list_4)
#列表、字典、字符串、集合、元组判断是不是成员都是用in
print(list_1.pop()) #任意删除一个
list_1.discard(4) #删除,没返回

 

 

 

 

 

 

以上是关于Python之路-(列表元组字典集合)的主要内容,如果未能解决你的问题,请参考以下文章

python学习之路(基础篇)——列表,字典,集合

小菜鸡进阶之路_Second week之元组列表集合字典对比.

python-列表list- 元组(tuple)- 集合(set)-字典(dict)-实例代码

python小白之路(特性语法三之元组字典)

Python学习之路——Python基础之基本数据类型(列表元组和字典)

Python列表,元组,字典,集合的比较总结【表格对比】