Python学习笔记--表list, 元组tuple, 字典dict

2024-05-05 13:38

本文主要是介绍Python学习笔记--表list, 元组tuple, 字典dict,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        Python中有三种重要而且非常好用的数据类型:list, tuple, dict(表,元组,字典)

        其中,list与tuple非常像,不过tuple中的数据不能修改。这三种数据类型不但可以单独使用,还可以互相嵌套使用,非常方便。在读写文件时,list也被广泛使用(使用形如:for l in list)。dict一般是使用键值对(key-value pair)来定义的,而且不能根据下标寻找数据,只能依靠key来找value(根本原因是dict是个无序不重复元素集set). 键值对使用形如key:value的形式定义;也可以直接使用value定义,这时就不能根据key来找value了,而且value不能重复(实际上,这时已经不是dict了,而是变成集合set了)。

        list与tuple都是序列(sequence),所以序列类型操作符均可以用:成员关系操作符(in, not in),连接操作符(+),重复操作符(*),切片操作符([], [:], [::])。 

        tuple的数据其实也不是一定不可变的,只是tuple中不能增加或减少数据,不能改变其中不能变化的数据类型,但如果item是可以改变的类型,如list,则可以改变list的数据,只是不能将list类型改变成其他的类型:

>>> t1=([1,2,3],'s','d')
>>> t1
([1, 2, 3], 's', 'd')
>>> t1[0].append(4)
>>> t1
([1, 2, 3, 4], 's', 'd')

方法:

        作为高级数据类型,它们也有各自的函数,即方法:(Python3.3)

#list相关list=['1','2','3']
list.append('4') #list追加数据
list.insert(1,'23') #在下标为1处,增加数据‘23’,原下标1出的数据顺序后移一位
list.remove('1') #删除list中数据'1',如果数据在list中不存在,则会报错。与del(list[1])功能类似,只是del是按list下标删除数据,越界也会报错。
list.pop(1) #删除list中下标为1的数据,并返回其值
list=list+['5'] #list连接list
for nr in list: #list元素遍历print(nr)list=[12,2,33,24]
list.sort() #list数据排序(数据必须为整型或浮点型),从小到大
list.reverse() #list数据顺序反转;如果先使用sort,再使用reverse,则可得到从大到小的数据list[1] #找到list中下标为1的数据
list[1]=111 #修改下标为1的数据为111
list.index(1) #找到list中数据值为1的数据的下标,如果找不到返回一个ValueError,由于list中数据不允许重复,所以不会对同一个数据出现两个下标if 2 in list: #判断2是否在list中#tuple相关
tup=(1,) #一个元素的元组,这是个特殊情况,其他都是正常的,比如,tup=(), tup=(1,2)
tup=((1,1),[21]) #tuple中可以包含tuple与list,甚至dictionary
tup[0] #找到tuple中下标为0的数据#dictionary相关
dict={1:'a',2:'b'} #使用键值对构成每一个元素
dict[1]='c' #使用key来修改value,如果没有key=1的value,则相当于给dict增加数据
			#与dict.setdefault(1,'c')相同
if 1 in dict.keys() #判断1是否是dict的key,dict.keys()返回一个dict的所有keys的list
dict.get(1,'not exist') #得到dict中key=1的值,如果不存在,则返回'not exist'.'not exist'是默认参数,可以不写。优于dict[1],因为如果不存在key=1是dict.get()不会报错,而dict[1]会引起KeyError
dict.pop(1) #删除key=1的键值对,并返回value,与del(dict[1])功能类似,但del没返回值
dict.keys() #返回包含dict的所有键的list
dict.values() #返回包含dict的所有值的list
dict.items() #返回包含由dict的所有键值对组成的元组的一个list
sorted(dict) #对dict的keys进行排序,得到排序后的一个list,前提是keys必须都是数字(整型与浮点型可混合)或者字符串


关于复制:

        list不能使用list_new=list,这样list_new只是相当于是list的一个别名,实际上相当于两个不同的指针指向同一块内存,通过任意一个名字改变了数据,从另一个名字那取得数据也相应的改变了。

        tuple则无所谓,因为tuple本身不能被修改,当使用tup2=tup1后,tup2有了与tup1相同的数据,然后,如果对tup1使用=进行赋值,则相当于将tup1与其原来指向的内存解绑,再绑定到现在新数据所在的内存上,但原数据并未删掉,tup2还是可以指向的(如果使用tup2=tup1[:],则更没有问题了)

        list的复制方法有4种,前3种相同,均是浅复制,最后一种是深度复制。浅复制时,如果list中的item本身也是一个list(或其他数据可变的类型),则对这个item本身只生成一个引用,与使用list_new=list的效果相同;如果想要将这些有嵌套的list完全复制,需要用copy模块中的deepcopy()函数:

>>> l1=[[1,2,3],'s'] #l1中既有嵌套的item,又有未嵌套的,l2,l3,l4,l5分别使用了四种不同的方法对其进行了复制。
>>> l2=l1[:]
>>> l3=l1.copy() #list.copy()不是copy模块的函数,而是list自带的方法
>>> l4=copy.copy(l1) #l4,l5使用前别忘了import copy
>>> l5=copy.deepcopy(l1)
>>> l1[0].pop()
3
>>> l1[1]='a'
>>> l1
[[1, 2], 'a']
>>> l2
[[1, 2], 's']
>>> l3
[[1, 2], 's']
>>> l4
[[1, 2], 's']
>>> l5
[[1, 2, 3], 's']

        dict的复制有list几乎相同,只是dict不能使用dict[:]切片操作,因为dict不是序列型。

其他:

        tuple可以用于多元赋值:

>>> x,y,z=1,2,3 #实际上=左右都是元组,各自赋值,=两边均可加(),为了避免一些可能的副作用,建议显式的添加()
>>> print(x,y,z)
1 2 3
>>> (x,y,z)=(4,5,6)
>>> print(x,y,z)
4 5 6
>>> (x,y)=(y,x) #一个重要用途是实现两个变量互相交换值,相当于C语言中的temp=x; x=y; y=temp;
>>> print(x,y)
5 4

        由于list与tuple均是序列,均可以使用序列相关的内建函数:sorted(), reversed(), enumerated(), zip(): 

>>> name=('Wang', 'Zhao', 'Liu')
>>> studentID=(1,2,3)
>>> for n in sorted(name): #排序print(n,'',end='')Liu Wang Zhao 
>>> for n in reversed(name): #倒转print(n,'',end='')Liu Zhao Wang >>> for i,n in enumerate(name): #可以获得每个item的下标print(i,n,'; ',end='')0 Wang ; 1 Zhao ; 2 Liu ; 
>>> for sid,n in zip(studentID,name): #可以将两个序列(studentID, name)中对应项组合到一起,组成一个个的tupleprint(sid,n,'; ',end='')1 Wang ; 2 Zhao ; 3 Liu ; 

        最后,关于dict的key,list与dict都不能作为这个key,因为key必须是可hash的,即key是不可变类型。

        

这篇关于Python学习笔记--表list, 元组tuple, 字典dict的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961861

相关文章

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.