1、列表常用函数
list.append(arr) | 追加成员,无返回值,将arr作为整体添加到list |
list.count(x) | 计算列表中的成员x出现的次数 |
list.extend(L) | 向列表中追加另一个列表L,将L列表展开添加到list,无返回值 |
index=list.index(x) | 获得成员x在列表中的位置,不存在时报异常 |
list.insert(index,value) | 向列表插入数据,index不可省略,为负数时,从尾部数,-1为从原list尾部数1个位置 |
value=list.pop([index]) | 根据索引删除成员,并返回被删除的成员值,index可为负数,省略时删除最尾部数据 |
list.remove(value) | 根据值删除成员,不存在时报错 |
del list[index] | 根据索引删除成员,index可为负数 |
list.reverse() | 将列表中的成员顺序颠倒,直接修改列表,无返回值 |
list.sort([key=fun, reverse=False]) | 对列表的成员排序,默认为升序排序,list.sort(reverse=True)进行降序排序, 该函数不返回新列表,直接对原列表进行排序。仅支持对list中元素类型相同情况下的排序,支持通过key函数返回的规则排序,例如key=len, key=lower |
newlist=sorted(list,[key=fun, reverse=False]) | 对列表进行排序并返回排序后的副本,但不改变原有列表,仅支持对list中元素类型相同情况下的排序,支持通过key函数返回的规则排序,例如key=len, key=lower |
value=sum(list[,start]) | 计算列表中各元素的和 |
value=len(list) | 列表长度 |
value=max(list) | 列表最大值 |
value=min(list) | 列表最小值 |
2、列表推导式
列表推导式:
推导式一:newlist = [expression for var in range([start,] stop[, step])]
对range中的每个ver执行expression生成新的元素,这些元素组成列表
该推导式可以用来生成期望长度的列表,长度用range控制即可
推导式二:newlist = [expression for var in list]
推导式三:newlist = [expression for var in list if condition ]
对list中的var如果满足条件condition则执行expression,生成新的元素后组成新列表返回
推导式四:newlist = [expression for var1 in list1 for var2 in list2]
取一个var1,然后取var2,执行expression,再取var2,执行expression…直至将list2执行完,然后再取一个var1,再执行一遍for var2 in list2的expression
实例:
list1 =[1,2,3,4]
list2=[5,6,7,8]
print([str(i)+'+'+str(j) for i in list1 for j in list2])
嵌套
mylist = [[1,2,3],[4,5,6],[7,8,9]]
print([item for line in mylist for item in line])
3、切片
(1)列表切片会进行列表的浅拷贝,对切片成员中不可变成员的修改不会影响原列表,例:
mylist =[1,2,3,4,5,6]
mylist2=mylist[1:]
mylist2[0]=100 #不影响mylist
(2)为什么切片和区间会忽略最后一个元素(左闭右开,含左不含右):
- 当只有最后一个位置信息时,可以快速看出切片和区间里有几个元素:range(3) 和 my_list[:3] 都返回 3 个元素。
- 当起止位置信息都可见时,可以快速计算出切片和区间的长度,用后一个数减去第一个下标(stop - start)即可
- 这样做也让我们可以利用任意一个下标来把序列分割成不重叠的两部分,只要写成 my_list[:x] 和 my_list[x:] 就可以了
(3)带step的切片
格式:seq[start:stop:step]
在start和stop区间内,按step选择元素,例如:
mylist = [‘a’,’b’,’c’,’d’,’e’]
newlist = mylist[::2] #将整个列表,按步长2切片,得到[‘a’,’c’,’e’]
(4)当切片出现在=号的左边时,可以实现对原序列的嫁接或修改
修改:
l = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l[2:4] = [20, 30] # [0, 1, 20, 30, 4, 5, 6, 7, 8, 9]
嫁接:
l = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l[1:1] = [20, 30] # [0, 20, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9]
需要注意的是:如果给切片赋值,那么赋值语句的右侧必须是个可迭代对象。即便只有单独一个值,也要把它转换成可迭代的序列。
(5)当切片出现在del的后面时,可以实现对原序列的切除
l = list(range(10))
print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del l[2:4]
print(l) # [0, 1, 4, 5, 6, 7, 8, 9]
4、列表合并
对于列表 a[xxx]、b[xxx]
c= a+b #合并生成一个新列表,+和*都不会修改原有序列,而是产生一个新的序列
a.extend(b) #将b合并到a
a[0:0]=b #将b嫁接到a
后续会陆续推出更多Python干货,喜欢的话就关注我吧。