热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python的元组,列表,字典,集合大综合

元组元组每个元素都有它的索引,并且内置确定最大最小元素的方法。它不能修改,创建的时候用圆括号(或者不用括号)列表用方括号。元

元组

元组每个元素都有它的索引,并且内置确定最大最小元素的方法。它不能修改,创建的时候用圆括号(或者不用括号)列表用方括号。元组中的元素用逗号分隔开,当元组中有一个元素时末尾要用逗号分隔开


>>>tup1 = ('Google', 'Runoob', 1997, 2000);
>>> tup2 = (1, 2, 3, 4, 5 );
>>> tup3 = "a", "b", "c", "d"; # 不需要括号也可以
>>> type(tup3)

元组的下标从0开始,可以通过索引对元组进行访问,


#!/usr/bin/python3tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])
结果:
tup1[0]: Google
tup2[1:5]: (2, 3, 4, 5)

元组里的元素是没办法修改的,但是可以对元组进行连接组合


#!/usr/bin/python3tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')# 以下修改元组元素操作是非法的。
# tup1[0] = 100# 创建一个新的元组
tup3 = tup1 + tup2;
print (tup3)
结果:
(12, 34.56, 'abc', 'xyz')

元组中元素的值不允许删除,但是可以通过del来删除整个元组


#!/usr/bin/python3tup = ('Google', 'Runoob', 1997, 2000)print (tup)
del tup;
print ("删除后的元组 tup : ")
print (tup)
结果:删除后的元组 tup :
Traceback (most recent call last):File "test.py", line 8, in print (tup)
NameError: name 'tup' is not defined

元组还可以复制,迭代,判断元素是否存在以及正反向读取,截取元素。

tup1 = (1, 2, 3, (4), [5], {6})
if 2 in tup1: #判断元素是否存在print('2存在')
else:print('不存在')
tup2 = (2, 3, 4, 5, 6)
for i in tup2:print(i) #元组的迭代
tup3 = ('aa',)*4 # 数组的复制
print(tup2[-2]) # 读取倒数第二个元素
print(tup2[2]) # 读取第三个元素
print(tup2[1:]) # 截取第二个之后的所有元素
print(tup3)
print(tup1+tup2)
print(tup1)
结果:
2存在
2
3
4
5
6
5
4
(3, 4, 5, 6)
('aa', 'aa', 'aa', 'aa')
(1, 2, 3, 4, [5], {6}, 2, 3, 4, 5, 6)
(1, 2, 3, 4, [5], {6})

列表
列表中的截取组合访问跟元组类似,关键点在于更新的时候,列表有append()方法可以用,将需要增加的元素加在列表的最后,如果要改变列表中某个元素的值可以直接取出需要改变的元素并给其赋值。

lis = [1,2,3,9,8,6,7,5,4,3]
a = lis.count(3)# 统计元素在列表中出现的次数
print(a)
#2
#lis1 = [3,4]
lis.extend([3,4]) #在元素的末尾一次性追加另一个序列中的多个值
print(lis)
#[1, 2, 3, 9, 8, 6, 7, 5, 4, 3, 3, 4]
b = lis.index(2) # 找出元素第一个匹配项的索引值
print(b)
#1
lis.insert(2,10) # 在列表的指定位置插入指定元素
print(lis)
#[1, 2, 10, 3, 9, 8, 6, 7, 5, 4, 3, 3, 4]
lis.pop() # 移除列表中的元素默认是最后一个
print(lis)
#[1, 2, 10, 3, 9, 8, 6, 7, 5, 4, 3, 3]
lis.remove(2) # 移除列表中某个值的第一个匹配项
print(lis)
# [1, 10, 3, 9, 8, 6, 7, 5, 4, 3, 3]
lis.reverse() # 反向列表中的元素
print(lis)
#[1, 10, 3, 9, 8, 6, 7, 5, 4, 3, 3]
lis.sort() # 默认递增排序
print(lis)
#[3, 3, 4, 5, 7, 6, 8, 9, 3, 10, 1]
#lis.clear()# 清空列表
#print(lis)
#[]
lis.copy()
print(lis)
# [1, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10]
# [1, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10]

在这我踩过一个坑,在迭代删除列表元素的时候可能跟预想的结果不一致,

test = ['a','','b','','c','','']
for i in test:if i == '':test.remove(i)print(i)
print(test)
结果:
a['a', 'b', 'c', '']

就例如这段代码,本以为可以把‘ ’全部移除但其实则不然,原因就在于for循环按照索引进行遍历,但是一旦执行一次remove元素就移走一个,原来列表的元素全部向前移动一位,这样一来原来索引指向‘ ’的时候满足条件‘ ’移走了,b取代了 ‘ ’的位置,但是这时候执行for循环索引加1指向b后边的那个‘ ’直接跳过了b,b也不会打印。

Test是Python List对象,用for循环遍历,内部维护了每次遍历的索引,执行一次,索引+1,假如有5个元素,索引是从0-4,每次+1,直到遍历结束,

第二次循环: i=空字符串,这时调用了test.remove(),它会遍历list。去equals每个元素,如果返回true就将它移除。所以第一个空字符串被删掉,但是循环指针索引不会改变,这时,元素移动情况如图:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述第四次循环,看图得知,for又指向空字符串,和上次循环同理,remove
在这里插入图片描述第五次循环,,,没了,元素全部用完了,在这要注意的是remove是删除第一个为某个元素的方法。

当然这只是注意事项,我们有很多方法来替代例如直接转化成集合,可以直接去重,如果想在li2列表中去掉li列表的元素,可以先copy一份li遍历li中的元素,操作li1中元素

li = [1,2,4,5,7,8]
li1 = [1,2,4,5,7,8]
li2 = [1,3,5,7,'a','s','d']
for i in li:if i in li2:li1.remove(i)
print(li1)
结果:
[2, 4, 8]

还有一种办法是倒序遍历列表,元素向前移动完全不影响,巧妙

a = [1,3 ,'c', 6,'c',8 ,'c',9 ,'c']
for i in reversed(a):if i=='c':a.remove(i)
print(a)
#[1, 3, 6, 8, 9]

字典

字典是一种可变的容器模型,可以存储任意类型的对象,键不必唯一但是值必须要唯一,它的值可以取任何数据类型,但是键必须是不可变的,字符串数字或者元组。

简单的字典:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

f访问字典里边的值:


#!/usr/bin/python3dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
结果:
dict['Name']: Runoob
dict['Age']: 7

修改字典:


#!/usr/bin/python3dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}dict['Age'] = 8; # 更新 Age
dict['School'] = "菜鸟教程" # 添加信息print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])
结果:
dict['Age']: 8
dict['School']: 菜鸟教程

删除字典的元素:


#!/usr/bin/python3dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}del dict['Name'] # 删除键 'Name'
dict.clear() # 清空字典
del dict # 删除字典print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])
但这会引发一个异常,因为用执行 del 操作后字典不再存在
Traceback (most recent call last):File "test.py", line 9, in print ("dict['Age']: ", dict['Age'])
TypeError: 'type' object is not subscriptable

最后笔者要说一点就是关于字典的元素删除,如果想删除里边的某个元素的话可能会想到迭代然后比较看是否存在这样的元素,存在就删除,但是会报错。正确的做法是可以将不需要删除元素单独放一起,然后就可以得到想要的元素了。或者是把需要删除的元素放到列表里,再迭代删除列表。

#错误
dir = {1:'a',2:'w',3:'e',4:'r',5:'t',6:'y',7:'u'}
for i in dir:if i ==2:del dir[i]
print(dir)
#报错
Traceback (most recent call last):File "F:/third/tttt.py", line 101, in for i in dir:
RuntimeError: dictionary changed size during iteration

正确
dir2={}
dir = {1:'a',2:'w',3:'e',4:'r',5:'t',6:'y',7:'u'}
for i in dir:if i == 2:passelse:dir2.setdefault(i,dir[i])
dir = dir2
print(dir)
#{1: 'a', 3: 'e', 4: 'r', 5: 't', 6: 'y', 7: 'u'}

由于它的方法比较多所以不在这举例,可以参看:
http://www.runoob.com/python3/python3-dictionary.html
集合

集合是不重复而且无序的元素序列,所以在去重的时候可以先将需要去重的数据转化成集合,集合会自动去掉重复元素。集合之间还可以求交集和并集反交集和差集等

集合添加元素可以是用add(x)或者update(x),update添加的元素可以有多个用‘,’分隔开,可以是列表元组字典等。

thisset = set(("Google", "Runoob", "Taobao"))thisset.add("Facebook")
print(thisset)
#{'Taobao', 'Facebook', 'Google', 'Runoob'}
thisset = set(("Google", "Runoob", "Taobao"))
thisset.update({1,3})print(thisset)
#{1, 3, 'Google', 'Taobao', 'Runoob'}thisset.update([1,4],[5,6]) print(thisset)
#{1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}

移除元素可以用remove(x)但是元素如果不存在的话会发生错误,另外一个方法discard(x),如果元素不存在不发生错误,pop(x)就是随机的删除一个元素。

thisset = set(("Google", "Runoob", "Taobao"))thisset.remove("Taobao")
print(thisset)
#{'Google', 'Runoob'}
thisset.remove("Facebook") # 不存在会发生错误
#Traceback (most recent call last):# File "", line 1, in
#KeyError: 'Facebook'

thisset = set(("Google", "Runoob", "Taobao"))
thisset.discard("Facebook") # 不存在不会发生错误
print(thisset)
#{'Taobao', 'Google', 'Runoob'}


thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
x = thisset.pop()print(x)
#Runoob

然而在交互模式,pop 是删除集合的第一个元素(排序后的集合的第一个元素)。

thisset = set(("Google", "Runoob", "Taobao", "Facebook"))thisset.pop()
#'Facebook'print(thisset)
#{'Google', 'Taobao', 'Runoob'}

计算集合的元素个数用len

thisset = set(("Google", "Runoob", "Taobao"))len(thisset)
#3

clear清空

thisset = set(("Google", "Runoob", "Taobao"))
thisset.clear()
print(thisset)
#set()

判断元素是否存在s中x in s

thisset = set(("Google", "Runoob", "Taobao"))"Runoob" in thisset
True
"Facebook" in thisset
#False>>>

内置方法完整列表参见:
http://www.runoob.com/python3/python3-set.html


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了如何在Mac上使用Pillow库加载不同于默认字体和大小的字体,并提供了一个简单的示例代码。通过该示例,读者可以了解如何在Python中使用Pillow库来写入不同字体的文本。同时,本文也解决了在Mac上使用Pillow库加载字体时可能遇到的问题。读者可以根据本文提供的示例代码,轻松实现在Mac上使用Pillow库加载不同字体的功能。 ... [详细]
author-avatar
走过滴岁月688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有