今天学习了Python的列表及元组
提到元组,一时半会只觉熟悉,却想不起了来源,直到看到tuple才想起来,在学习数据库时也有这个元组。不过数据库的元组与Python的元组却是大有区别,python的元组与列表,都与C-like语言里有许多相似的地方;
先讲python的列表,再讲元组,再讲二者的不同;
· 列表
数组一个基本要求:存储同种类型的数据
Python中没有定义数据类型,所以列表有很大的包容性 ,是一个打了激素的数组
一.创建新列表
1.创建一个普通列表
#----- 普通列表 ---------
#字符串列表
member=['yhr', 'love', 'zwh']
for i in member:
print(i, end=' ')
#数字列表
number=[1,2,3,4,5]
for i in number:
print(i, end=' ')
print('\n')
2.创建一个混合列表
#------------混合列表 ------------
mix=[1,'yhr',3.14,['a','b',5,6]]
for i in mix:
print(i, end=' ')
3.创建一个空列表
#------------空列表-----------
empty=[]
print(len(empty))
#打印列表长度
二.向列表添加元素
append()方法,方法与bif不同,因为append是属于对象的方法
【只能一次性添加一个元素】
empty.append('yhr')
↓
extend()方法 参数是一个列表,用一个列表扩展另外一个列表
empty.extend(['loves', 'zwh'])
↓
以上两个方法均默认添加至末尾,可以尝试插入
↓
Insert() #第一个参数为插入位置下标,注意:从0开始 第二个参数类型为参数,与append相似
#第一个参数为插入位置下标,注意:从0开始
empty.insert(0, 'hahaha')
三.从列表中获取元素
利用列表的index索引值获得单个元素
member[0],member[1]…..
print(empty)
print([empty[0]])
四.从列表删除元素
remove() 列表对象的方法 参数为列表中的元素 若待删除元素不存在,则会报错
print(empty)
empty.remove('yhr')
for i in empty:
print(i, end=' ')
↓
del() 参数为 member删除整个列表 / member[index] 删除列表中某个具体的
print(empty)
del empty[0]
for i in empty:
print(i, end=' ')
↓
pop() 列表对象的方法 python的列表事实上是利用栈来进行存取的:
参数可以不选择,pop方法则是从列表中取出最后一个元素并且返回;
参数可以选择,则为数组索引
print(empty)
empty.pop()
for i in empty:
print(i, end=' ')
五.列表分配 slice
利用索引值,每次可以从数组或取一个值,但是可以利用列表分片,一次性从列表获取多个元素
print(empty)
#列表分片,参数为索引值(默认0开始) 不包括index为stop的值(默认为表尾)
print(empty[1:3])
print(empty[:3])
print(empty[:])
六.列表的一些常用操作符
·比较操作符
Eg:
list1=[123,456]
list2=[234,123]
for i in list1:
print(i)
print(list1>list2)
#发现只比较列表第一0个参数
list1=['abc']
list2=['abd']
#应该是比较ascaii码?
print(list1<list2)
list3=['ab']
print((list1<list2)and(list2>list3))
·逻辑操作符
·连接操作符
#+类似于字符串拼接,也类似于extend方法, 用一个列表扩展另外一个列表
list3=list1+list2
print(list3)
#但是+不能连接一个新元素 因为+两边要求类型一样,均为字符串或者列表才可以
#TypeError: can only concatenate list (not "str") to list
#list3=list1+"hahaha"
print(list3)
·重复操作符
#重复操作符可以作为复制
list3*3
print(list3)
list3*=3
print(list3)
·成员关系操作符
print(list3)
#成员关系操作符 in / not in
print('abc'in list3)
print('abc'not in list3)
成员关系操作符只能判定一层关系,不能判定列表里的列表的元素
类似于break continue 只能处理本层循环,无法处理母层循环
list4=[123,list3]
print(list4)
print('\n')
print('abc'in list4)
#成员关系操作符只能判定一层关系,不能判定列表里的列表的元素,类似于break continue
#但是可以这样
print('abc'in list4[1])
print(list4[1][2])
#因为此时list[1]指代一个列表,至于list4[1][2]则为列表里一个列表里的元素
七.列表拷贝
#列表的拷贝
empty2=empty[:] #合理的列表拷贝
empty3=empty #其实这种做法不太可取
print(empty)
print(empty2)
print(empty3)
print('\n--------------')
empty.reverse()
print(empty)
print(empty2)
print(empty3)
两者不同之处解释如下:
empty2=empty[:] #合理的列表拷贝 拷贝元素,重新生成一个新的列表
empty3=empty #仅仅新建一个变量名,指向同一个地址,类似于C-like指针
八.小函数
count计算参数在列表里出现的次数
#count计算参数在列表里出现的次数
print(list3)
print(list3.count('abc'))
index默认返回0开始元素第一次出现的索引
print(list3.index('abc'))
#index返回start到stop元素第一次出现的索引
print(list3.index('abc',1,5))
reverse 将整个列表原地翻转
print(list3)
#reverse 将整个列表原地翻转
list3.reverse()
print(list3)
sort 用指定的方法对列表元素进行排序,默认从小到大
#sort 用指定的方法对列表元素进行排序,默认从小到大
list6=[1,4,2,3,6,8,65,22]
list6.sort()
print(list6)
print('-----------\n')
#sort有三个参数 func指定排序方法,key为搭配关键字,reverse默认为False
#sort(func,key,reverse)
list6.sort(reverse=True) #从小到大排序后翻转
print(list6)
· 元组
元组 : 一个带上了枷锁的列表
元组其实与列表在很多方面非常相似;元组和列表最大的不同:
列表可以任意的修改添加删除排序等操作列表的元素;但是元组不可以
1.创建元组
大部分创建元组用的小括号 列表是中括号:
tuple1=(1,2,3,4,5,6,7,8,9)
print(tuple1)
print(tuple1[3])
print(tuple1[:7])
tuple2=tuple1[3:7]
print(tuple2)
但是加上小括号也不一定是元组
就算没有小括号,也可能是元组
所以对对于元组来说,逗号是关键
但是空元组为:
Temp=()
创建只有一个元素的元祖,可以加一个逗号:
2.更新元组
虽然元组建立后不能更改内容:
#元组元素不可修改
#tuple1[3]=2
#TypeError: 'tuple' object does not support item assignment
但是可以做一些小小的更新:
分片一个元组或者列表时,参数为索引值(默认0开始) 不包括index为stop的值(默认为表尾)
#更新一个元组
temp=('小甲鱼','yhr','zwh','hahaha')
print(temp[:2])
print(temp[2:])
print('-----------\n')
#temp=temp[:2]+('loves')+temp[2:] #xxxxx 这是不对的!
#一定要加逗号,拼接要求两边相同类型!!
temp=temp[:2]+('loves',)+temp[2:]
print(temp)
#原来的temp元组其实还在,但是由于没有标签指向他,
#过一会被python回收机制回收
3.删除元组
#删除整个元组
#del temp
可以发现在删除temp元组后,尝试访问temp元组是会报错的。
同时,当一个元组里没有任何标签的时候,前文提到的Python回收机制,会将元组回收。
4.元组的一些操作符:
·拼接操作符+ :拼接要求两边相同类型
·重复操作符 *
注意区分:
8*(8)=64
8*(8,)=(8,8,8,8,8,8,8,8)
·
成员关系操作符 in not in
·关系操作符 > <….
·逻辑操作符 and or…..