Python序列结构
python序列结构属于容器类结构,用于包含大量数据,类似于其他语言的数组,其功能更强大。
1. 列表(list,[ ])
创建列表:
>>>a_list=['a', 'b', 'c'] #1.赋值创建
>>>a_list=[] #2.创建空列表
>>>
List函数可以将元组,range对象,字符串,字典,集合或可迭代对象转换为列表
#元组转换
>>>a_list=list((1,2,3,4))
>>>a_list
[1,2,3,4]
>>>
删除列表:
>>>a_list=['a', 'b', 'c']
>>>del x
>>>
列表元素访问:
>>>a_list=['a', 'b', 'c', 'd']
#整数访问
>>>a_list[1] #正整数访问,下标以0开始从左到右
'b'
>>>a_list(-1) #负整数访问,下标以0开始从右到左,这里的负数按照生活中解释为倒#数第几个
'c'
>>>
列表用法:
1. append(),insert(),extend()
>>>a_list=['a', 'b', 'c', 'd']
>>>a_list.append('e') #尾部追加元素
>>>a_list.insert('aa',0) #在指定位置插入,在下标为0,插入’aa’,其他元素后移
>>>a_listk.extend(['f','g']) #在尾部追加多个元素
>>>a_list
['aa', 'a', 'b', 'c', 'd', 'e', 'f','g']
>>>
2. pop(),remove(),del
>>>a_list=['a', 'b', 'c', 'd', 'b']
>>>a_list.pop()
#弹出并返回指定尾部元素(默认为最后一个元素)从左到右
'b'
>>>a_list.remove('b') #删除列表中第一个值与指定值为2相等的元素
>>>a_list
['a', 'c', 'd', 'b']
>>>del a_list[3] #删除指定位置上元素
>>>a_list
['a', 'c', 'd']
>>>
注:指定位置不是合法索引将抛出异常,列表不存在该元素将抛出异常
3. sort(),reverse()
>>>x=list(range(5)) #包含5个整数的列表
>>>x
[0,1,2,3,4]
>>>import random
>>>random.shuffle(x) #列表顺序随机打乱
>>>x
[0,4,1,2,3]
>>>x.extend([12,123]) #在尾部增加多个元素
>>>x
>>>x.sort(key=lambda item:len(str(item)),reverser=True) #按照转换成字符串以后的长度
>>>x #reverser=True 这里的是降序排列
[123,12,0,4,1,2,3]
>>>x.reverse() #原地翻转
>>>x
[3,2,1,4,0,12,123]
>>>
sort()用法: 按照指定的规则对列表中所有元素进行原地排序(如果里面没有指定规则排序也就是默认排序)
reverser()用法:将列表所有元素原地翻转,也就是第一个变最后一个,最后一个变第一个,第二个元素变倒数第二个,类推。
4. 列表中的zip()函数
用法:
多个列表元素重新组合,长短不同,以短的为准。例:
>>>x=[1,2,3,4,5]
>>>x
[1,2,3,4,5]
>>>y=list([1]*3)
>>>y
[1,1,1]
>>>list(zip(x,y))
[(1,1),(2,1),(3,1),(4,1),(5,1)]
>>>
以元组的方式迭代对象。例:
>>>list(zip(range(1,4)))
[(1,),(2,),(3,)]
>>>
可以把enumerate对象转换为列表,元组,集合 。例:
>>>x=[1,2,3,4,5]
>>>list(enumerate(x))
[(0,1),(1,2),(2,3),(3,4),(4,5)]
>>>
5.for循环的用法
for循环的遍历用法:
[ 元素出现方式 for 变量 in 范围 条件 ] #注:这里的 [ ] 是以什么方式遍历,可以为无组,集合等
例:
>>>from random import randint
>>>x=[randint(1,10) for i in range(10) if i>0] #10个1-10的整数(不包含10)
>>>x
[9,5,6,7,8,1,3,4,1,2]
>>>
for的嵌套使用:
>>>[(x,y) for x in [1,2,3] if x==1 for y in [3,1,4] if y!=x]
[(1,3),(1,4)]
等价于
>>>a_list=[]
>>>for x in [1,2,3]:
if x==1:
for y in [3,1,4]:
if y!=x:
a_list.append((x,y))
>>>a_list
[(1,3),(1,4)]
>>>
注:前者代码简洁,可读性差,后者可读性比较好
列表推导式
在逻辑上列表推导式相当于循环语句,只是形式上更加简洁,对于初学者来说可读性不是很好,列表推导式通过 [ ] 括起,内是循环语句
例如:
>>>a_list=[x+x for x in range(30)] #生成列表推导式
等价于有循环体的循环语句:
>>>a_list=[]
>>>for x in range(30):
a_list.append(x+x)
切片
切片适用于列表,元组,字符串,range对象。在列表中切片可以截取列表中的任何部分,还可以增加修改和删除列表中的部分元素
语法:
列表名 [ start : end : step]
注:
start表示切片开始位置,默认为0 ; end表示切片截止位置(不包含),默认列表长度 len(list); step 表示切片的步长,默认为1,为负数时,为反向切片
为默认值时均可以省略,step为1时,前面的:也可以省略
1. 切片获取列表部分元素
>>>a_list=[3,4,5,6,7,8]
>>>aa=a_list[::] #返回列表中所有元素,形成新的列表
>>>aa
[3,4,5,6,7,8]
>>>a_list[::-1] #返回列表的逆序列表
[8,7,6,5,4,3]
>>>a_list[::2] #从下标0开始,隔一个取一个
[3,5,7]
>>>a_list[2:4] #从按照下标位置,指定开始位置和结束位置,指定截取
[5,6]
>>>a_list[2:10] #指定结束位置大于列表长度,从列表尾部截取
[5,6,7,8]
>>>
2. 切片增加列表元素
>>>x=[3,4,5]
>>>xx=x[:0]=[1,2] #在列头增加多个元素
>>>xx
[1,2]
>>>x
[1,2,3,4,5]
>>>x[len(x):]=[6] #在列尾增加元素,len()表示原列表大小
>>>x
[1,2,3,4,5,6]
>>>x[3:3]=[44] #指定位置上插入元素(以下标为准),这里可以是一个,也可以是多个元素插入
>>>x
[1,2,3,44,4,5,6]
>>>
注意3这种情况:(插入变替换)
3. 切片替换修改列表元素
>>>x=[1,2,3,4,5,6,7]
>>>x[4:6]=[44,55,66]
>>>x
[1,2,3,44,55,66,7]
>>>
这种连续的插入会替换原来元素(表示4到6为44,55,66)
>>>x=[1,2,3,4,5,6]
>>>x[::2]=['a','b','c']
>>>x
['a',2,'b',4,'c']
>>>
注: 隔一个修改一个,切片不连续时等号两边列表长度必须相等
4. 切片删除列表元素
>>>x=[1,2,3,4,5,6]
>>>x[2:3]=[]
>>>x
[1,2,4,5,6]
>>>
del与切片相结合删除元素(可以是不连续的)
>>>x=[1,2,3,4,5]
>>>del x[::2]
>>>x
[2,4]
>>>