Python---基本知识12之常用数据类型列表
什么是列表?
列表就是可变的有序的元素集合,列表里面的每一个元素都有他的下标,其实python里面的列表就有些像java里面的数值,
列表的表现形式:从下面这个列表我们可以看出来,列表是用一对[],然后里面的类型是object,什么类型都可以,也可以嵌套列表;
name=['zhangsan','lisi',18,19,True,[8,6]]
列表的赋值方式:上面就是一种赋值方式,直接赋值,还有一个range()函数也可以完成列表的赋值:这个函数,有3个参数,第一个参数是起始位置,然后是终点位置,最后一个是步长,也是左闭右开区间;对于range()函数,需要注意一点就是在python3里面你用到这个列表的时候才会生成,如果你没有用到这个列表是不会生成的
age=range(5,91,2)
第二种赋值方式:列表推导式,用for in 语句,用这种方式可以把一个列表进行克隆或者是说变大或者缩小;
age=[1,2,3,5,7,9,11]
age1=[num for num in age if num%2==0]
print(age1)
列表的常用操作,这个对于列表来说还是比较重要的,就和之前说的字符串的常用操作一样,主要有四种常用操作:
增:
A:通过append()语句,用于在列表的末尾增加一个元素;
age = [9]
age.append(10)
print(age)
B:通过insert语句,可以把一个object插入你想插入的地方;
age = [9]
age.insert(0,10)
print(age)
C:通过extend()语句,可以把一个列表增加多个值,但是这些值也是只能增加在最后;
tag=[2,8,10]
age = [9]
age.extend(tag)
print(age)
D:通过乘法运算和加法运算也可以把列表增加:乘法就是把自己乘多少遍,加法就是在最后连接一个列表,需要注意一点就是这两种方式不会修改原列表;
tag='woshishui'
age = [9]
age*=5
age+=tag
print(age)
删:
A:pop()语句,删除对应下标值的元素;默认是-1,即最后一个元素;
age=[1,2,3,4,5,6,7,8]
age.pop(0)
print(age)
B:remove()语句,删除对应的object元素,默认是移除最左边的一个object
age=[1,2,3,4,5,6,7,8]
age.remove(1)
print(age)
C:del语句,这个就厉害了,这个会删除内存地址,即会把你的存储空间都删掉
age=[1,2,3,4,5,6,7,8]
del age
改:可以通过下标值去直接修改object,需要注意的是[]里面的值是下标值;
age = [1, 2, 3, 4, 5, 6, 7, 8]
age[1] = 8
print(age)
查:
A:获取单个元素
age = [1, 2, 3, 4, 5, 6, 7, 8]
print(age[2])
B:获取元素索引,Index()语句,第一个元素是object值,第二个元素是起始位置,第三个元素是终点位置;
age = [1, 2, 3, 4, 5, 6, 7, 8,2,8,2]
print(age.index(2,-2))
C:获取指定元素个数:count()
age = [1, 2, 3, 4, 5, 6, 7, 8,2,8,2]
print(age.count(2))
D:切片,就和string一个形式,第一个参数是起始位置,第二个参数是终点位置,第三个参数是步长,需要注意一点就是中间是用:间隔符;如果步长是负数,就是从最后一个开始往前面取值,
age = [1, 2, 3, 4, 5, 6, 7, 8, 2, 8, 2]
print(age[1:8: 2])
E:反转[::-1]
age = [1, 2, 3, 4, 5, 6, 7, 8, 2, 8, 2]
print(age[:: -1])
F:遍历
F.1通过元素进行遍历:
age = ['a','v','f','g','s','w']
for v in age:
print(v)
F.2通过索引进行遍历:首先应该得到元素的索引,然后通过索引就能拿到元素的值了:
age = ['a','v','f','g','s','w']
indexs=range(len(age))
for v in indexs:
print(age[v])
F.3通过枚举对象遍历:通过枚举函数,将一个可遍历的对象生成一个新的对象,这个对象的每一个元素都包含之前对象的下标和对应值;由于枚举对象的每一个元素都是一个元祖对象,所以也可以这样写 a,b
age = ['a','v','f','g','s','w']
enum =enumerate(age)
for e in enum:
print(e)
age = ['a','v','f','g','s','w']
enum =enumerate(age)
for a,b in enum:
print(a,b)
F.4通过迭代器进行遍历:在讲通过迭代器进行遍历之前,需要讲两个概念一个就是可迭代对象,一个是迭代器,可迭代对象实际上就是指这个对象拥有遍历的这个属性,可以使用for in进行遍历,那么这个对象就是可迭代对象,另外一个使用一个函数进行验证,isinstance,这个函数相当于是判断这个对象是否拥有这个能力,
判断是否可迭代
import collections
age = ['a','v','f','g','s','w']
result=isinstance(age,collections.Iterable)
print(result)
那么什么又是迭代器呢,迭代器是可以记录遍历位置的对象,也就是说你把一个列表转成迭代器之后,迭代器本身就拥有了遍历的能力了,也就是可以自己完成遍历了,当然迭代器也是可迭代对象,所以自然也可以用for in 语句,把一个可迭代对象转成迭代器使用:iter()函数;判断是否是迭代器也有两种方式,第一就是可不可以自己完成遍历过程,也就是调用next()函数,第二也是用isinstance函数,
it=iter(age)
result=isinstance(it,collections.Iterator)
next(it)
print(result)
===========================
it=iter(age)
result=isinstance(it,collections.Iterator)
next(it) for i in it:
print(i)
print(result)
迭代器的优点:节约内存空间,他只有一个内存地址保存当前遍历到的对象,这之前,之后的对象都没有分配内存地址,也提供了统一的针对可迭代对象进行遍历的接口;需要注意一点是迭代器只能迭代一次,不能多次使用;
G:判定,判断一个元素是否在一个集合里面,用in not in语句;
age = ['a','v','f','g','s','w']
newStr='a'
newStr1='l'
result=newStr in age
result1=newStr1 not in age
print(result,result1)
H:比较,对于比较的话,python2用的是cmp()函数,而python3用的是比较符:> < ==
H.1 python3:
list = [1, 9, 6]
list1 = [1, 8, 7]
resule = list > list1
print(resule)
H.2 python2
list = [1, 9, 6]
list1 = [1, 8, 7]
result=cmp(list1,list)
print(result)
I.排序,有两种方式,一种就是用内建函数,sorted,第二种用列表对象方法,list.sort()两种方法都是大同小异,先说第一种:
list=['k','a','s','w','j']
result=sorted(list,reverse=True)
print(result)
reverse控制的是增序,还是降序,默认是增序,设置为True就是降序;还有一种情况就是指定排序的元素,比如:这种情况就针对一个元素有多个值得情况,我们可以让它对哪个进行排序;
list=[('n',5),('w',8),('h',9),('t',1),('b',3),('l',7)]
def getkey(x):
return x[1]
result=sorted(list,key=getkey)
print(result)
list.sort()方法,是针对于列表本身得,所以通过这种方式改变得是列表本身,也并没有返回值,sorted方法呢,是内建函数,他不会改变列表本身,只会将列表排好序之后返回出来;
J:乱序,就是把列表得顺序打乱,通过得是random得shuffle()函数,打乱得是列表本身
list=[('n',5),('w',8),('h',9),('t',1),('b',3),('l',7)]
random.shuffle(list)
print(list)
K:反转,两种方式,一种是直接调用:reverse(),这种方式反转得是列表自己,另一种用切片反转;这种方式,列表不会改变:
list.reverse()
res=list[::-1]
好了 ,列表所有操作结束了;