Day3 python 的序列之列表和元组

1187-吴同学

发表文章数:41

首页 » Python » 正文

序列梗概

序列是一种数据的存储方式,python中的常用序列结构有:字符串、列表、元组、字典、集合。在内存中,序列是一块用来存放多个值的连续的内存空间。

列表

字符串是字符序列,列表是任何元素的序列。
python3中一切皆对象,列表a=[10,20,30],其中每个数字都是一个对象,当然,列表中的对象可以各不相同,可以是任何类型的。存储过程大致如下:
Day3 python 的序列之列表和元组

列表的创建

  1. 创建
a=[666,'sixsix',[10,'six']] #列表是任何元素的序列
a=[]   列表是任何元素的序列
  1. list()
a=list()   #列表是任何元素的序列
a=list(range(10))   #list()可将任何迭代的数据化成列表
print(a)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a=list('CSDN is ok!')  #['C', 'S', 'D', 'N', ' ', 'i', 's', ' ', 'o', 'k','!']

/quad

PS:range()创建整数列表:

/qquad/qquad

range(start,end,step)

/qquad/qquad

sart参数,表起始数字,可选填,默认为0。

/qquad/qquad

end参数,表结尾数字,必选填

/qquad/qquad

step参数,表步长,可选填,默认为1

/qquad/qquad

note:包头不包尾,返回一个range()对象,不是列表,需要list()方法转换

  1. 推导式
a=[x*2 for x in range(100) if x%8==0]#通过循环创建多个元素,通过if过滤元素
print(a)
#[0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192]

列表常用方法

列表元素的增加和删除

python的列表大小可变可根据需要随时增加或缩小
列表增加和删除元素时列表会自动进行内存管理,会涉列表元素的大量移动,效率低。尽量只在列表的尾部添加或删除元素,提高列表工作效率。

  1. append()方法
    在尾部添加元素,不创建新的对象
a=[1,2]
a.append(3)
print(a)
#[1,2,3]
  1. +运算符操作
    直接拼接,创建新的列表对象,原列表元素和新列表元素依次复制到列表对象,会产生很多对象,涉及大量复制操作,对操作大量元素不建议使用
[1,2]+[5]
#[1,2,5]
  1. extend()方法
    将列表添加到列表的尾部,原地操作 ,不创建新的列表对象。
a=[1,2]
a.extend([3,4])
print(a)
#[1,2,3,4]
  1. insert()插入元素
    将指导的元素插入到列表对象的任意位置,使原有位置及后面的元素后移,涉及复制操作。涉及大量元素时,避免使用。
a=[1,2]
a.insert(0,3)
print(a)
  1. 乘法拓展
    生成一个新列表,新列表为原列表的多次重复
a=[1,2,1,3]
print(a*3)
#[1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 3]
  1. remove(),pop(),del删除操作
    删除非尾部元素时也会涉及复制操作,避免使用。
    Day3 python 的序列之列表和元组
    del 删除列表指定索引位置的元素
a=[100,200,888,300,400]
del a[2]
print(a)
#[100,200,300,400]

pop()删除并返回指定索引处的字符,默认是最后一个元素

a=[1,2,1,3]
b=a.pop(0)
#a=[2,1,3] b=1

remove()删除列表首次出现的指定元素,若元素不存在,抛出异常

a=[1,2,1,3]
a.remove(1)
print(a)
#[2,1,3]
  1. clear()方法清空列表
    清空列表元素,不是删除列表对象
a=[1,2,3]
a.clear()
print(a)
#[]

列表元素的访问和计数

  1. 通过索引直接访问元素
    索引的区间在[0,列表长度-1]这个范围,访问某个元素时超出这个范围会抛出异常(切片时不会)
  2. index()获得指定元素在列表中首次出现的索引**
    index(value,[start,[end]])

    /qquad

    start和end指定了搜索的范围,若不存在则抛出异常

a=[1,2,3,1,2,3,1,2,3]
print(a.index(1,3))#搜索元素1,从索引3开始搜
#3
  1. count()获得指定元素在列表中出现的次数
a=[1,2,3,1,2,3,1,2,3]
print(a.count(1))
#3
  1. len() 返回列表长度
    返回元素的个数
  2. 成员资格判断
    5.1. 用in,not in关键字判断
    5.2. 用count()方法,0表示不存在,大于0则存在(一般 不用)
a=[1,2,3,1,2,3,1,2,3]
1 in a
#True
print(a.count(1)>0)
#True

列表切片操作

切片标准格式[start:end[:step]]

/qquad

当步长省略时,则可省略第二个冒号,步长,索引都可以是负数。范围包头不包尾

示例 操作
a[:] 提取整个列表
[start : ] 从start索引开始到结尾
[ : end] 从头开始到end-1
[start : end] 从start索引开始到end=1
[start : end : step] 从start索引开始到end-1,步长为step

切片操作时,起始偏移量和终止偏移量量不在[-列表长度,列表长度-1]不会报错,默认为从开头到结尾

列表的遍历

for obj in listobj:
print(obj)

列表排序

  1. 修改原列表,不建新列表的排序
    示例:a=[[1,2,3,1,2,3,1,2,3]
操作 说明 结果
a.sort() 排序,默认升序排列 不返回列表,[1, 1, 1, 2, 2, 2, 3, 3, 3]
a.sort(reverse=True) 降序排列 不返回列表,[3, 3, 3, 2, 2, 2, 1, 1, 1]
a.a.reverse() 逆序排列 不返回列表,[3, 2, 1, 3, 2, 1, 3, 2, 1]
import random
random.shuffle(a)
打乱排序 不返回列表[2, 2, 1, 3, 3, 1, 1, 2, 3]
  1. 不改原列表,建新列表的排序
操作 说明 结果
sorted(a) 通过内置函数,默认升序 返回新列表,[1, 1, 1, 2, 2, 2, 3, 3, 3]
sorted(a,reverse=True) 降序排列 返回新列表,[3, 3, 3, 2, 2, 2, 1, 1, 1]
reversed(a) 内置函数,逆序排列 返回迭代器,需要用**list()**转为列表,[3, 2, 1, 3, 2, 1, 3, 2, 1]
a[::-1] 通过切片方法逆序 返回列表,[3, 2, 1, 3, 2, 1, 3, 2, 1]

迭代器只能用一次,迭代器内包含了指针,用完一次,指针走到了列表元素最前面。

a=[1,2,3,1,2,3,1,2,3]
c=reversed(a)
print(c)
#<list_reverseiterator at 0x23d1a1d5848>
print(list(c))
#[3, 2, 1, 3, 2, 1, 3, 2, 1]
print(list(c))
#[]

列表相关的其他内置函数

示例:a=[1,2,3,4,5,6]

内置函数操作 说明 结果
max(a) 返回最大值 6
min(a) 返回最小值 1
sum(a) 对数值型列表返回求和,其他的保2 21

多维列表(以二维列表为例)

一维列表可以存储一维、线性的数据。
二维列表可以存储二维表格的数据
Day3 python 的序列之列表和元组
内存结构:
Day3 python 的序列之列表和元组
循环打印二维列表

for m in range(len(a)):
		for n in range(len(a[m])):
				print(a[m][n],end='/t')
		pirnt()#换行

元组

元组是不可变序列,不能改变元组中的元素,访问和处理速度比列表快,元组和整数、字符串一样可以作为字典的键,列表不可以

元组的创建和删除

  1. 小括号创建元组,小括号可省略
a=(1,)#创建单个元素的元组,要加逗号
print(a)
#(1,2,3)
a=(1)
print(a)
#1
a=1,#创建单个元素的元组,要加逗号
print(a)
#(1,2,3)
  1. tuple创建元组
    tuple(可迭代对象或其他序列),类似list()
print(tuple('abc'))
#('a', 'b', 'c')
print(tuple([1,2,3]))
(1,2,3)
print(tuple(range(3)))
(0,1,2)
  1. 索引访问,切片操作,成员关系操作,连接操作,计数:元组长度len(),最大值max(),最小值min(),求和sum()等**
    同列表
  2. 排序
    不能修改元组,从而只能使用内置函数sorted(),返回是新的列表
  3. zip()函数
    zip(列表1,列表2,…)将多个列表对应位置的元素组合成元组,并返回这个zip对象
a=[1,2,3]
b=[4,5,6]
c=[7,8,9]
d=zip(a,b,c)
print(d)
#<zip at 0x23d1a1da288>
print(tuple(d))
#((1, 4, 7), (2, 5, 8), (3, 6, 9))
print(tuple(d))
#()

生成器推导式创建元组

形式上看,与列表推导式类似,但用的是小括号。
生成器推导式,生成的不是列表也不是元素,而是一个生成器对象。
生成器只能访问一次元素

a=(x for x in range(5))
print(a)
#<generator object <genexpr> at 0x0000023D1A18A748>
a=[x for x in range(5)]
print(a)
#[0, 1, 2, 3, 4]

用__next__()方法遍历(指针移动)

a=(x*2 for x in range(3))
print(a.__next__())
#0
print(a.__next__())
#2
print(a.__next__())
#4
print(a.__next__())
#抛出错误

拜师教育学员文章:作者:1187-吴同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Day3 python 的序列之列表和元组》 发布于2020-08-22

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录