序列
序列是一种数据存储方式,序列中存储的是整数对象的地址么人不是整数对象的值。Python中常用序列结构有:字符串,列表,元组,字典,集合。
列表
用于存储关于任意数目,任意类型的数据集合。是内置可变序列,包含多个元素的有序连续的内存空间。 字符串和列表都是序列类型,字符串是字符序列,列表是任何元素的序列。字符串的许多方法,在列表中也有类似的用法,几乎一模一样。
创建列表
- 基本语法[]创建
a = [1,'a',23,'sherry']
- list()创建
将任何可迭代数据转化为列表。
a = list()
a = list('sherry')
a = list(range(10))
- range()创建
创建整数列表。 range([start,] end [,step]) - 推导式生成
a = [x*2 for x in range(5)]
a = [x*2 for x in range(100) if x%9 == 0]
列表元素的增加和删除
我们一般在列表的尾部添加或删除元素,以大大提高列表的操作效率。
- 元素增加
append()方法:在列表尾部添加对象。 +运算符操作:创建新的列表对象,将原列表的元素和新列表的元素复制到新的列表对象中。 extend()方法:将目标列表的所有元素添加到本列表的尾部,原地操作,不创建新对象 【推荐使用】。 insert()方法:将指定元素插入到列表任意位置,会导致插入位置后的列表的元素移动,会影响处理速度。 涉及大量运算时应避免使用。 乘法扩展:生成一个新列表,新列表元素是原列表元素的多次重复。
a = list()
a = list('abc')
a.append(10)
a = a + ['b','c']
a.extend([50,60])
a.insert(2,'sherry')
b = a*3
- 元素删除
del 删除:删除位置元素全部前移 pop()方法:删除并返回指定位置元素,如果未包含指定位置则默认操作列表最后一个元素(从尾部弹出)。 remove()方法:删除首次出现的指定元素,若不存在该元素则抛出异常。
a = range(5)
del a[0]
b = a.pop(1)
a = [10,20,30,10,20,30]
a.remove(20)
a.remove('sherry')
列表元素的访问和计数
- 通过索引直接访问元素
列表索引范围是[0,len-1],超出这个范围则会抛出异常。 - index()获得指定元素在列表中首次出现的索引
index(value,[start,[end]])
a = [10,20,30,10,20,30]
a.index(20)
a.index(20,3,len(a)
- count()获得指定元素在列表中出现的次数
a = [10,20,30,10,20,30]
a.count(20)
- len()返回列表的长度
a = [10,20,30,10,20,30]
b = len(a)
- 成员资格的判断
判断列表中是否存在指定的元素,一般使用in关键词。
a = [10,20,30,10,20,30]
b = 10 in a
c = 'sherry' in a
列表的切片slice操作
切片slice操作可以让我们快速提取子列表或者修改。标准格式: 列表[起始偏移量 start:终止偏移量 end [:步长 step]] 切片操作,起始偏移量和终止偏移量不在[0,len-1]范围也不会报错。 起始偏移量和终止偏移量要么同为正数,要么同为负数。
列表排序
修改原列表,不建新列表的排序 · sort():默认升序排列 · sort(reverse=True):降序排列
import random
a = list(range(10))[::-1]
a.sort()
a.sort(reverse=True)
random.shuffle(a)
建新列表的排序 内置函数sorted()生成新的列表对象
a = list(range(10))[::-1]
b = sorted(a)
c = sorted(b,reverse=True)
reversed()返回迭代器 内置函数reversed()也支持进行逆序排列,不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。
max()和min()函数返回列表中的最大值和最小值,sum()对数值型列表所有元素求和,对非数值型列表报错。
a = list(range(10))
b = max(a)
c = min(a)
d = sum(a)
多维列表
二维列表
一维列表可以帮助我们存储一维、线性的数据。 二维列表可以帮助我们存储二维、表格的数据。例如:
a = [
["高小一",18,30000,"北京"],
["高小二",19,20000,"上海"],
["高小一",20,10000,"深圳"],
]
b = a[0]
b = a[0]2]
内存结构图:
元组
列表属于可变序列,可以修改列表中的元素。元组属于不可变序列,不能修改元组中的元素,因此没有删除、修改、删除元组元素的相关方法。 列表和元组都可以包含任意对象。 因此只需学习元组的创建,和删除,以及元素中元素的访问和计数等。 元组支持如 下操作: 1.索引访问 2. 切片操作 3. 连接操作 4. 成员关系操作 5. 比较运算操作 6. 计数:元组长度 len()、最大值 max()、最小值 min()、求和 sum()等。
元组的创建
- 通过()创建元组
如果元组只有一个元素,则后面必须加逗号,因为解释会把例如(3)解释成整数3,把(‘abc’)解释成字符串’abc’。
a = (1,2,3,4)
a = (1,)
a = ('a',)
- 通过tuple()创建元组
b = tuple()
b = tuple('abc')
b = tuple(range(5))
b = tuple(['abc',2,3])
- 生成器推导式创建元组
从形式上看,生成器推导式与列表推导式类似,只是中括号换成了小括号。并且列表推导式直接生成列表对象,而生成器推导式生成的既不是列表也不是元组,而是一个生成器对象。 我们可以通过生成器对象,转化为列表或者元组,也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
s = (x*2 for x in range(5))
b = tuple(s)
c = list(s)
s = (x*2 for x in range(5))
s.__next__()
s.__next__()
s.__next__()
s.__next__()
s.__next__()
s.__next__()
总结: tuple()可以接收列表、字符串、其他序列类型、迭代器等生成元组。 list()可以接收元组、字符串、其他序列类型、迭代器等生成列表。
元组元素的访问和计数
a = (1,2,3,4)
a[0] = 10
b = a[0:3]
列表关于排序的方法 list.sorte()是修改原列表对象,元组没有该方法。如果要对元组排序,只能使用内置函数 sorted(tupleObj),并生成新的列表对象。
a = (1,2,3,4)
b = sorted(a, reverse=True)
zip(列表 1,列表 2,…)将多个****列表对应位置的元素组合成为元组,并返回这个 zip 对象。
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
d = zip(a,b,c)
e = list(d)
元组总结 1.元组的核心特点是:不可变序列。 2.元组的访问和处理速度比列表快。 3. 与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。
|