栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python基础知识-pycharm版 3

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python基础知识-pycharm版 3

一、序列

序列是一种数据存储方式,用来存储一系列的数据。比如一个整数序列[10,20,30,40],序列中存储得到是整数对象的地址,而不是整数对象的值。

常用的序列结构有:字符串、列表、元组、字典、集合

1. 列表

用于存储任意数目、任意类型的数据集合

列表是内置可变序列,是包含多个元素的有序连续的内存空间

列表定义的标准语法格式:a = [10,20,30,40]

{其中10,20,30,40这些被称为:列表a的元素}

列表中的元素可以各不相同,可以是任何类型

字符串和列表都是序列类型,一个字符串就是一个字符序列,一个列表是任何元素的序列,因此很多字符串的方法在列表中也有类似的用法。

(1)列表的创建

a[0]        #索引:即列表a中的第一个元素

【基本语法创建】

>>> a = [10,20,'abc','six']

>>> a = [] #创建一个空的列表对象

【list()创建】

使用list()可以将任何可迭代的数据转化为列表

>>> a = list()        #创建一个空的列表对象

>>> a = list(range(10))

>>> a

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]        #生成0-9十个数字

【range()创建整数列表】

语法格式:range([start],end,[step])

>>> list(range(3,15,2))

[3, 5, 7, 9, 11, 13]        #3-15,包含3不包含15

【推导式生成列表】

使用列表推导式可以非常方便的创建列表,涉及到for循环和if语句

>>> a = [x*2 for x in range(5)]        #对于range(5)中的x生成x*2的列表

>>> a

[0, 2, 4, 6, 8]

>>> a = [x*2 for x in range(100) if x%9==0]        #对于range(100)中能被9整除的x生成x*2的列表

>>> a

[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]

(2)列表元素的增加

当列表增加和删除元素时,列表会自动进行内存管理,但是涉及到元素的大量移动,因此一般只在列表尾部添加元素或删除元素

【append()方法】

原地修改列表对象,是在列表尾部添加新元素

>>> a= [20,40]

>>> a.append(80)

>>> a

[20, 40, 80]

【+运算符操作】

并不是真正的尾部添加新元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样会涉及大量的复制操作,对于操作大量元素不建议使用

>>> a = [20,40]

>>> id(a)        #查看对象a的id

46016072

>>> a = a + [50]

>>> id(a)

46015432        #发现对象a的id发生了改变,意味着创建了新的列表对象

【extend()方法】

将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象

>>> a = [20,40]

>>> id(a)

46016072

>>> a.extend([50,60])

>>> id(a)

46016072        #对象没有发生变化,只是添加了新元素

【insert()插入元素】

使用insert()方法可以将指定的元素插入到列表对象的任意指定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。

>>> a = [10,20,30]

>>> a.insert(2,100)        #表示在2号位插入100这个新元素(0号位是在元素10前面,1号位是在元素10和元素20之间的位置)

>>> a

[10, 20, 100, 30]

【乘法扩展】

使用乘法扩展列表,生成一个新列表,新列表元素是原列表元素的多次重复

>>> a = ['sts',100]

>>> b = a*3

>>> a

['sts', 100]

>>> b

['sts', 100, 'sts', 100, 'sts', 100]

(3)列表元素的删除

【del 删除】

删除列表指定位置的元素

>>> a = [10,20,30]

>>> del a[1]        #指定删除1号位上的元素(即元素20)

>>> a

[10,30]

【pop()方法】

pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素

>>> a = [10,20,30,40,50]

>>> a.pop()        #没有指定位置,默认删除最后一个元素50

50

>>> a

[10,20,30,40]

【remove()方法】

删除首次出现的指定元素,若不存在该元素抛出异常

>>> a = [10,20,30,40,50,20,30,20,30]

>>> a.remove(20)        #这里指定了要删除的元素是20,那么会在元素20第一次出现的位置将其删除,后续元素20出现的位置不受影响

>>> a

[10,30,40,50,20,30,20,30]

(4)列表元素访问和计数

【通过索引直接访问元素】

通过索引直接访问元素时,索引的区间在[0,列表长度-1]这个范围内,超过这个范围则会抛出异常

>>> a = [10,20,30,40,50,20,30,20,30]        #列表长度len(a)=9

>>> a[2]        #索引2号位上的元素(即元素30)

30

【index()获得指定元素在列表中首次出现的索引】

index()可以获取指定元素首次出现的索引位置

语法:index(value,[start],[end]) start和end指定了搜索范围

>>> a = [10,20,30,40,50,20,30,20,30]

>>> a.index(20)        #未指定搜索范围,即对整个列表进行搜索

1        #代表元素20第一次出现在列表的1号位

>>> a.index(20,3)        #指定的搜索范围是从3号位开始

5        #代表元素20第一次在列表三号位以后出现的位置是5号位

【count()获得指定元素在列表中出现的次数】

count()可以返回指定元素在列表中出现的次数

>>> a = [10,20,30,40,50,20,30,20,30]

>>> a.count(20)

3        #代表元素20在列表a中出现了3次

【len()返回列表长度】

即元素个数

【成员资格判断】

判断列表中是否存在指定的元素

可以使用count()方法,返回0则表示不存在,返回大于0则表示存在

但是一般会使用更加简洁的in关键字来判断看,直接返回True或False

>>> a = [10,20,30,40,50,20,30,20,30]

>>> 20 in a

True

>>> 100 not in a

True

(5)切片操作

切片操作适用于列表、元组、字符串等。切片slice操作可以快速提取子列表或修改。

标准格式为:[起始偏移量 start:终止偏移量 end:步长step] 步长可以省略

对于起始偏移量和终止偏移量来说,包头不包尾

 

 切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围也不会报错。起始偏移量小于0则会当做从右往左进行索引,终止偏移量大于“长度-1”会被当成索引至末尾

>>> [10,20,30,40,50,20,30,20,30][-5:30]

[50, 20, 30, 20, 30]

(6)列表的遍历

格式:

for obj in listObj:

        print(obj)

>>> for x in a:        #a = [10,20,30,40,50,20,30,20,30]
    print(x)

    
10
20
30
40
50
20
30
20
30

(7)列表的排序

【修改原列表,不建新列表的排序】

>>> a = [20,10,30,40]

>>> id(a)

46017416

>>> a.sort()        #默认是升序排列,即按照从小到大的顺序

>>> a

[10,20,30,40]

>>> id(a)

46017416

>>> a = [10,20,30,40]

>>> a.sort(reverse=True)        #降序排列

>>> a

[40, 30, 20, 10]

>>> import random        #随机排序

>>> random.shuffle(a)        #打乱顺序

>>> a

>>> [20, 40, 30, 10]

【创建新列表的排序】

可以通过内置函数sorted()进行排序,返回新列表,不对原列表修改

>>> a = [20,10,30,40]

>>> id(a)

46017416

>>> a =  sorted(a)        #默认升序

>>> a

[10,20,30,40]

>>> id(a)

45907848

【reversed()返回迭代器】

内置函数reversed()也支持进行逆序排列,与列表对象reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象

>>> a = [20,10,30,40]

>>> c = reversed(a)

>>> c

        #c不是列表,而是一个迭代器

>>> list(c)

[40, 30, 10, 20]

>>> list(c)        #再次使用迭代器发现返回的是空列表,说明迭代器只能使用一次

[]

(8)列表相关的其他内置函数汇总

【max和min】

返回列表中的最大和最小值

[40, 30, 20, 10]

>>> a = [3,10,20,15,9]

>>> max(a)

20

>>> min(a)

3

【sum】

对数值型列表的所有元素进行求和操作,对非数值型列表运算则会报错

>>> a = [3,10,20,15,9]

>>> sum(a)

57

(9)多维列表

如果将一维列表中的数字元素改为一维列表时,列表的维度则会发生变化

上述二维列表可通过如下代码实现:

 

 2. 元组 tuple

 (1)元组的创建

【通过()创建元组,小括号可以省略】

a = (10,20,30)        或者        a = 10,20,30

如果元组中只有一个元素,则必须后面加逗号,这是因为解释器会把(1)解释为整数1,(1,)解释为元组

【通过tuple()创建元组】

tuple(可迭代的对象)

(2)元组的删除

del b

(3)元组的元素访问和计数

元组的元素访问和列表一样,只不过返回的仍然是元组对象

列表关于排序的方法list.sorted()是修改原列表对象,元组没有该方法。如果要对元组排序,只能使用内置函数sorted(tupleObj),并生成新的列表对象

>>> a = (20,10,30,9,8)

>>> sorted(a)

[8, 9, 10, 20, 30]

(4)zip

zip(列表1, 列表2, ...)将多个列表对应位置的元素组合成为元组,并返回这个zip对象

>>> a = [10,20,30]

>>> b = [40,50,60]

>>> c = [70,80,90]

>>> d = zip(a,b,c)

>>> list(d)

[(10, 40, 70), (20, 50, 80), (30, 60, 90)]

(5)生成器推导式创建元组

(6)总结

元组的核心特点是:不可变序列

元组的访问和处理速度比列表快

与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用

3. 字典

字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”,包含:

【键对象】“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。但是:列表、字典、集合这些可变对象,不能作为“键”。并且“键”不可重复。

【值对象】“值”可以是任意的数据,并且可重复

可以通过“键对象”实现快速获取、删除、更新对应的“值对象”

典型的字典的定义方式:

a = {'name':'liming','age':18,'job':'programmer'}        #成对的

(1)字典的创建

【通过{}、dict()创建】

>>> a = {'name':'liming','age':18,'job':'programmer'}

>>> b = dict(name='liming',age=18,job='programmer')

>>> a = dict([("name","liming"),("age",18)])

>>> c = {}        #空的字典对象

>>> d = dict()        #空的字典对象

【通过zip()创建】

>>> k = ['name','age','job']

>>> v = ['liming',18,'programmer']

>>> d = dict(zip(k,v))        #第一个参数代表的是键

>>> d

{'name':'liming','age':18,'job':'programmer'}

【通过fromkeys创建值为空的字典】

>>> a = dict.fromkeys(['name','age','job'])

>>> a

{'name':None,'age':None,'job':None}        #None表示空的意思,代表对象还没有被赋值

(2)字典元素的访问

对字典 a = {'name':'liming','age':18,'job':'programmer'} 可通过如下方式访问元素

【通过 [键] 获得 “值”,若键不存在,则抛出异常】

>>> a = {'name':'liming','age':18,'job':'programmer'}

>>> a['name']

'liming'

【通过get()方法获得 “值”】

优点:指定键不存在,返回None;也可以设定指定键不存在时默认返回的对象

>>> a = {'name':'liming','age':18,'job':'programmer'}

>>> a.get('name')

'liming'

>>> a.get('sex')

>>> print(a.get('sex'))

None

>>> a.get('sex','man')        #设定默认返回对象为man

'man'

【列出所有的键值对】

>>> a.item()

dict_item([("name","liming"),("age",18),("job","programmer")])

【列出所有的键,列出所有的值】

>>> a.keys()

dict_keys(['name','age','job'])

>>> a.values()

dict_values(['liming',18,'programmer'])

【len()】

字典中有多少键值对的个数

【检测一个 “键” 是否在字典中】

>>> a = {'name':'liming','age':18,'job':'programmer'}

>>> 'name' in a

True

(3)字典元素的添加、修改、删除

【给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,则新增“键值对”】

>>> a = {'name':'liming’,'age':18,'job':'programmer'}
>>> a['address']='西三旗 1 号院'
>>> a['age']=16
>>> a
{'name': 'liming', 'age': 16, 'job': 'programmer', 'address': '西三旗 1 号院'}

【使用 update()将新字典中所有键值对全部添加到旧字典对象上。如果 key 有重复,则直接覆盖】

>>> a = {'name':'liming','age':18,'job':'programmer'}
>>> b = {'name':'gaoxixi','money':1000,'sex':'男的'}
>>> a.update(b)
>>> a
{'name': 'gaoxixi', 'age': 18, 'job': 'programmer', 'money': 1000, 'sex': '男的'}

【字典中元素的删除,可以使用 del()方法;或者 clear()删除所有键值对;pop()删除指定键值对,并返回对应的“值对象”】

>>> a = {'name':'liming','age':18,'job':'programmer'}
>>> del(a['name'])
>>> a
{'age': 18, 'job': 'programmer'}
>>> b = a.pop('age')
>>> b
18

【popitem()】

随机删除和返回该键值对。字典是“无序可变序列”,因此没有第一个元素、最后一个元素的概念;popitem 弹出随机的项,因为字典并没有"最后的元素"或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效(因为不用首先获取键的列表)

>>> a = {'name':'liming','age':18,'job':'programmer'}
>>> a.popitem()
('job', 'programmer')
>>> a
{'name': 'liming', 'age': 18}
>>> a.popitem()
('age', 18)
>>> a
{'name': 'liming'}

4. 集合

5. 序列解包

【序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值】
>>> x,y,z=(20,30,10)
>>> x
20
>>> y
30
>>> z
10
>>> (a,b,c)=(9,8,10)
>>> a
9 >
>> [a,b,c]=[10,20,30]
>>> a
10
>>> b
20
【序列解包用于字典时,默认是对“键”进行操作; 如果需要对键值对操作,则需要使用items();如果需要对“值”进行操作,则需要使用 values()】
>>> s = {'name':'liming','age':18,'job':'teacher'}
>>> name,age,job=s        #默认对键进行操作
>>> name
>>> 'name'
>>> name,age,job=s.item()        #对键值对进行操作
>>> name
('name','liming')
>>> name,age,job=s.values()        #对值进行操作
>>> name
'liming'

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号