一.列表
1)列表介绍
列表是Python内置的一种数据类型。
>一组有序项目的集合(从第一个成员序号为0开始依次递增排序) >可变的数据类型(可进行增删改查) >列表中可以包含任何数据类型,也可包含另一个列表(可任意组合嵌套) >列表是以方括号“ []”包围的数据集合,不同成员以“ ,”分隔 >列表可通过序号访问其中成员
2)列表的基本操作
"""声明和创建列表""" L = [] # 创建一个空列表 L = [1, 2, 'hank', 4] # 通过将不同数据类型的数据用中括号括起来创建一个列表 L = list('hank') # 通过list()方法将字符串转换为['h', 'a', 'n', 'k']列表 L = list(range(4)) # 或者将能形成序列的数据转化为列表 L[0] # 通过下标访问成员
"""增加元素""" # 追加一个任意类型的成员append L = [1, 2, 3] L.append('hank') # 将一个成员追加到L列表末尾:[1, 2, 3,'hank'].其他数据类型也一样 # 插入一个成员insert L = [1, 2, 3] L.insert(1, 'hank') # 表示在1号位置前插入‘hank’:[1, 'hank', 2, 3] # 将两个列表及合并 L1 = [1, 2, 3] L2 = L1 + [4, 5, 6] # 这种方法是将后一个列表追加到前一个列表中,即L1且L1不会发生变化 L2 = L1.extend([4, 5, 6]) # 通过extend()方法直接扩增, 同时等价于 L1 += [4, 5, 6]
"""删除元素""" L = [1, 2, 3, 4] L.remove(1) # 按值删除成员 del L[1] # 删除按索引指定的成员(del的作用是取消对象引用到数据项的绑定,并删除对象引用,引用被删除后数据项将被当做垃圾处理掉) def L[:2] # 同时可以按切片删除一段成员 L.pop(1) # 通过pop()方法删除成员若不指定位置参数则删除最后一个成员
L.pop()
"""修改元素""" L = [1, 2, 3, 4] L[0] = 9 # 通过索引值修改某个元素 L[:2] = [7, 8] # 通过切片修改一段列表
3)列表切片
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] L[0:2] #[1, 2], 取区间[i,j) ,左闭右开 L[:2] #同上,可省略第一位 L[2:] #[3, 4, 5, 6, 7, 8, 9, 10, 11] L[2:-1] #[3, 4, 5, 6, 7, 8, 9, 10] L[:] #同l1,相当于复制一份 L[::2] #步长2,[1, 3, 5, 7, 9, 11] L[0:7:2] #[1, 3, 5, 7] L[7:0:-2] #[8, 6, 4, 2] 注意步长为负、理解起来相当于从7到1,倒序步长2
4)列表其他操作
"""排序""" list.sort()进行排序 L = [3, 4, 2, 5] L.sort() # 默认升序 # sort可以接受参数 # cmp,比较函数,接受两个参数,小于时返回负,大于返回正,相等返回0 # key,指定排序键 # reverse,指定是否反序
# sorted()函数排序 L = [3, 4, 2, 5] sorted(L, key=str.lower, reverse=True) # 反序 L.reverse() reversed(L) # 返回一个iterator
sort sorted 区别
sort: 在原 list 上排序,不返回排序后的 list sorted: 不改变原 list ,返回排序后的 list
"""查找和统计""" A.直接 L = [1, 2, 3, 4, 5] for i in L: print i B.需要索引位置 L = [1, 2, 3, 4, 5] for index, value in enumerate(L): print(index, value) # enumerate()方法可以将其组成一个索引序列,利用它可以同时获得索引和值 len(L) # 列表长度 L * 3 重复 L = [1, 2] L * 3 # [1,2,1,2,1,2] 清空列表 L = [] L[:] = [] del L[:] 复制列表 L2 = L1[:] 注意:在操作list时,如果是涉及原地修改的操作,例如append, insert等,返回值是None 要防止出现这种语法 L = L.append('a') ,如果这样,你将得到None.......
c.任意可迭代的(元组,列表等)数据类型都可以使用序列拆分操作符进行拆分,即*。
>>>first, *rest = [1, 2, 3, 4]
>>>first, rest
>>>(1, [2, 3, 4])
二.列表解析
1)定义说明
>Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list。 >列表解析,又叫列表推导式( list comprehension) >列表解析比 for 更精简,运行更快,特别是对于较大的数据集合 >列表解析可以替代绝大多数需要用到 map和 filter的场合
列表推导式提供了一个创建链表的简单途径,无需使用 map() , filter() 以及 lambda 。以定义方式得到列表通常要比使用构造函数创建这些列表更清晰。每一个列表推导式包括在一个 for 语句之后的表达式,零或多个 for 或 if 语句。返回值是由 for 或 if 子句之后的表达式得到的元素组成的列表。如果想要得到一个元组,必须要加上括号。
2)基本列表解析
基本
>>> [x for x in range(5)] # [0, 1, 2, 3, 4] l1 = [1,2,3,4] [ x*2 for x in l1] #[2,4,6,8]
多个值
[ '%s = %s' for (k, v) in a_map.items()]
两次循环
>>> l1 = [1,2,3,4] >>> l2 = [1,2,3,4] >>> [x+y for x in l1 for y in l2] [2, 3, 4, 5, 3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8]
可以调用函数
[ func(x) for x in l1] #等价于map
注意:列表解析不会改变原有列表的值,会创建新的list
条件列表解析
[ x for x in range(100) if x%2 ==0 ]
嵌套列表解析
mat = [ [1, 2, 3],[4, 5, 6], [7, 8, 9]]
交换行列
[ [row[i] for row in mat] for i in (0,1,2)] #[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
一.元组
1)元组介绍
元组和列表非常类似,但是元组一旦初始化就不能修改(并不能修改顶层成员)
1)元组操作
其操作基本与列表相似,在此不做过多说明。