最新动态
【python学习笔记】序列
2024-11-12 01:22

python的序列包括字符串、列表、元组、集合和字典。其中集合和字典不支持索引、切片、相加和相乘的操作。此外,python的序列索引除了从0开始递增,也可以从-1开始递减,表示从后往前倒序取值。

【python学习笔记】序列

 

python中序列切片的语法是s[start : end : step]。其中start表示切片开始的索引位置,切片时包括该位置,不指定时默认为0;end表示切片结束的索引位置,切片时不包括该位置,如果不指定,默认为序列长度;step表示切片的步长,即每隔step个元素取一个元素,如果不填,则最后一个冒号可以省略。

 

序列相加会把两个相同类型的序列中的元素连接起来,体现在字符串上就是字符串的拼接。

 

序列乘上一个数字n,会生成一个新的序列,内容为原序列重复n遍。

 

list列表进行乘法运算时,还可以实现初始化列表的长度,例如下面的代码会初始化一个长度为5,元素都是None的list。

 

使用value in sequence可以检查某元素是否在序列中,返回结果为boolean类型。

 

除了in之外,还有not in的用法,检查某个元素是否不在序列中。

 

len()函数可以返回序列的长度。

 

max()和min()函数可以取序列中的最大值和最小值。

 

list()函数可以将序列转为list列表。

 

str()函数可以将序列转为字符串。

 

sum()函数可以计算数列中各元素的加和,调用该函数时要求序列内所有元素均为数字。

 

sorted()函数可以对序列中的元素进行排序。

 

reversed()函数可以倒转序列中的元素,需要注意的是reversed()函数不对原序列做任何修改,只返回一个迭代器对象。

 

python的list列表,类似java中的数组,不过比数组功能更强大。

python中声明list有两种方法,一种是使用[]直接创建。

 

此外,还可以通过list()函数来创建列表。

 

访问列表元素可以直接使用索引或切片。

 

python中可以使用del关键字来删除列表,个人感觉用处不是特别大。

 

列表可以通过加法运算来添加元素,实际上相当于两个列表的拼接。

 

append()方法可以在列表的末尾添加元素。

 

从上面的打印结果可以看出,append相当于java中的add或者push,是将l2作为一个元素添加到l1中。python中还有一个extend()方法,功能相当于不区分类型的加法运算,可以将单个元素、元组、列表中的元素拆开后分别添加到列表中。

 

append()和extend()方法都只能在列表的末尾添加元素,如果需要在列表的中间位置插入元素,则需要用到insert()方法。

 

insert()方法的第一个参数为索引,第二个参数为插入的内容。insert()方法与append()一样,会将其他序列当成一个对象插入。

python中的列表有4中删除元素的方法,第一种是del关键字,使用del关键字不只可以删除列表,还可以用来删除列表中的某个或某段连续的元素。

 

使用起始索引与结束索引删除时,与切片一样,删除的内容包含起始索引,不包含结束索引。

 

第二种删除方法为pop()方法,如果pop()不传参数,默认删除列表的最后一个元素,类似出栈操作。

 

除了根据下标删除之外,python还提供了remove()方法,可以根据元素的值进行删除,若有多个相同的元素,remove()方法只会删除第一个。需要注意的是,必须保证要删除的值是存在的,否则会抛出异常。

 

最后一种删除方法clear(),实际上就是清空列表。

 

修改元素就是对列表中的某个索引进行赋值操作。

 

python中还可以通过切片给一组元素赋值,如果切片时不指定步长,python就不要求新赋值的元素个数与原来的元素个数相同,因此该操作也可以用来插入或删除元素。

 

如果对空切片赋值,相当于插入一组新的元素。

 

如果使用字符串对列表进行切片赋值,会自动将字符串转为列表,而不是将整个字符串作为一个元素。

 

切片赋值时也可以指定步长,此时要求新值元素与原本的元素个数相同。

 

在列表中判断元素存不存在也可以用in和not in关键字。

 

列表还提供了index()方法,该方法会返回检索到的第一个元素的下标,完整的格式为l.index(obj, start, end),obj表示要查找的值,start和end表示起始位置和结束位置。

 

该方法如果检索不到元素,会导致ValueError异常,所以使用该方法之前可以先用in关键字,或者count()方法判断一下,count()方法会返回元素在列表中出现的次数。

 

元组tuple是python中的一种序列结构,元组和列表的不同之处在于:列表的元素是可以更改的,包括修改元素值,删除和插入元素;而元组一旦被创建,它的元素就不可更改了,所以元组是不可变序列。

元组使用()来声明,除了不可变之外与列表几乎一样。

 

元组中的小括号不是必须的,只要把元素用逗号隔开,python就会将其视为元组。

 

需要注意的是,当元组中只有一个字符串类型的元素时,该元素后面必须加上一个,否则python会将其视为字符串。 除了用小括号声明之外,元组也可以用tuple()方法来声明,用法与list()一致。

元组可以通过下标和切片来访问,访问方法与序列一样,这里就不再赘述了。

前文提到元组是不可变的序列,所以要对元组进行修改时,只能创建一个新的元组。

删除元组也和列表一样,使用del关键字。

python中的字典是以键值对的形式存储数据的一种序列,在我看来,python的字典结合了js和java对json对象的操作。

首先,可以像list和tuple一样,用直接写出来的方式来声明字典,字典的符号和json对象一样是花括号{}。

 

字典的key可以是数字、字符串或者元组,但是不可以是列表。 除了直接写的方式,字典还可以用fromkeys()方法来声明,该方法的完整格式为dict.fromkeys(list,value=None),其中list为存储键的列表,value表示默认值,如果不写则为空值None。使用该方法声明的字典所有值都是value。

 

python中还可以使用dict()映射函数来声明字典。 dict()方法有多种写法,第一种可以写成a = dict(str1=value1, str2=value2, str3=value3),str为键,value为值;也可以写成a = [(‘str1’,value1), (‘str2’,value2), (‘str3’,value3)]、a = [[‘str1’,value1], [‘str2’,value2], [‘str3’,value3]]等等,这种写法可以用列表和元组自由组合,共有四种写法;还可以与zip()方法组合使用,keys = [‘one’, ‘two’, ‘three’],values = [1, 2, 3] ,使用a = dict( zip(keys, values) )这两个方法来把keys和values两个列表组成字典。

python中可以和js一样直接使用dictname[key]来访问字典,使用这种方式时键必须存在,否则会抛出异常。

 

也可以像java一样使用get()方法访问,这种情况键不存在时不会抛出异常。

 

get()方法还有一个参数,可以用来指定键不存在的时候返回的内容。

 

删除字典和列表、元组一样,使用del关键字。

字典中新增和修改值的操作是一样的,只要给一个key赋一个新的值就可以了。

 

删除键值需要使用del关键字。

 

判断字典中是否存在某个键值对,可以用in或者not in关键字,这两个关键字都是根据key来判断的。

 

可以通过dic(dict)方法来查看dict中包含哪些方法。

 

keys(),values(),items()方法功能差不多,keys()是获取字典中所有的键,values()获取字典中所有的值,items()获取字典中所有的键值对。

 

通过打印结果可以看出,上述三个方法返回的数据类型分别是dict_keys、dict_values 和 dict_items。如果要使用这三个方法的值,一般用list()方法转为列表,或者直接进行遍历。

 

copy()方法会返回一个字典的拷贝,也即返回一个具有相同键值对的新字典。

 

需要注意的是,copy()方法所遵循的拷贝原理,既有深拷贝又有浅拷贝。例如下面的例子

 

向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来,因此 a 添加新键值对,不会影响 b。

 

由于 b 和 a 共享[1,2,3](浅拷贝,因此移除 a 中列表中的元素,也会影响 b。

 

从打印结果可以看出,copy()方法会对最表层的键值对进行深拷贝,也就是内存地址不同;但是对于其中列表类型的数据,做的是浅拷贝,a和b的[1,2,3]用的是同一块内存地址,修改其中一个,另一个也会改变。 update()方法可以使用一个字典来更新另一个字典,如果两个字典有相同的key,则原字典的value会被覆盖;如果没有,则会追加键值对。

 

pop() 和 popitem() 方法都是用来删除字典中的键值对,pop()方法是根据key来删除键值对;popitem()方法没有参数,会弹出底层的最后一个key,类似出栈的操作。

 

setdefault()方法用来获取某个key的value,完整的语法为dictname.setdefault(key, defaultvalue),defaultvalue为默认值,可以不写,不写的话默认为None,当字典中不存在key时,会为key赋上defaultvalue的值,再返回defaultvalue。 setdefault()方法和get()方法的区别就是会不会给不存在的key赋值。

python中的set集合使用{}来声明,集合中的元素只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合。且集合中的元素是唯一的,如果放入重复的元素,会自动去重。

set集合的声明有两种方式,一种是直接写出来。

 

需要注意的是,直接写出来的时候不能声明空的组合,因为{}会被创建成字典。 另一种声明集合的方式为set()方法,可以将可迭代对象转化为集合。

 

由于set集合中的值不能是列表、字典、集合,所以下面这种写法也会报错。

 

由于set集合是无序的,所以不能使用下标来访问集合的元素,通常可以直接循环遍历集合中的元素。

 

删除集合与其他序列相同,都是使用del关键字。

set集合可以使用add()方法来添加元素。add()方法同样不能添加列表、字典、集合这类可变的数据。

 

set集合可以使用remove()方法来移除元素。需要注意的是,如果要移除的元素不在set中,会抛出KeyError异常。

 

python中的集合求交集、并集、差集、对称差集的运算符分别是&、|、-、^。

 

set1对set2的差集为,取set1中set2里没有的元素。 对称差集的意思为,set1&set2相对于set1|set2的补集。

通过dir(set)可以查看set集合对象的所有方法,除上文介绍的add()、remove()之外,其他一些常用方法的用法如下

    以上就是本篇文章【【python学习笔记】序列】的全部内容了,欢迎阅览 ! 文章地址:http://mdekt.bhha.com.cn/quote/554.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 康宝晨资讯移动站 http://weazh.bhha.com.cn/ , 查看更多