注册 登录

清河洛

python中list的常用操作

qingheluo2017-09-15清河洛326
添加会改变原数组list.append(value):在列表末尾添加新的对象元素list.insert(index,value):在指定的索引位置插入新的对象元素list.extend(other_list):在列表末尾一次性追加另一个序列中的多个值删除会改变原数组list.remove(value):删除指定的值,如果有多个,则删除第一个list.pop([index=-1]):删除一个元素(默认最后一个),并且返回该元素的值查找list.index(value[,start,end]):从列表中指定的索引范围找出某个值第一个匹配项的索引排序list.reverse():反向排列列表中...

添加

会改变原数组

list.append(value):在列表末尾添加新的对象元素

list.insert(index,value):在指定的索引位置插入新的对象元素

list.extend(other_list):在列表末尾一次性追加另一个序列中的多个值

删除

会改变原数组

list.remove(value):删除指定的值,如果有多个,则删除第一个

list.pop([index=-1]):删除一个元素(默认最后一个),并且返回该元素的值

查找

list.index(value[,start,end]):从列表中指定的索引范围找出某个值第一个匹配项的索引

排序

list.reverse():反向排列列表中元素

list.sort(func[,reverse=False]):对列表进行排序,reverse表示排序方式,为False表示从小到大,为True表示从大到小

其他

list.count(value) :统计某个元素在列表中出现的次数

list.clear():清除列表中的所有元素,把列表变成一个空列表

list.copy():复制列表并返回复制的列表。和list[:]效果一样

range([x=1,]y[,z=1]):生成一个从x开始(包含x)到y(不包含y)的步长为z的range对象

列表的遍历

for val in list: print(val)
每次迭代获取一个元素的值

enumerate(sequence, [start=0])函数用于将一个可遍历的数据对象(一个序列、迭代器或其他支持迭代对象)变成索引-元素对,start表示下标起始位置,默认为0。一般用在 for 循环当中。

seasons = ['A','B','C']

list(enumerate(seasons))
[(0, 'A'), (1, 'B'), (2, 'C')]

list(enumerate(seasons, start=1))
[(1, 'B'), (2, 'C')]

for i, value in enumerate(seasons):

print(i, value)
0 A
1 B
2 C

一次给多个变量赋值,如name,age,gender=[1,2,3],表示列表中的元素按顺序赋值给这三个变量

all(list) :判断一个列表或者元组中的元素转换为bool是否都为true,有一个为0、空、False 或者列表为空则返回false。

any(list) :判断一个列表或者元组中的元素转换为bool是否含有True,有一个为true返回true

sum(list[,num]) 先对列表中的元素相加,然后在加上数值num,num可以省略

filter(func or None,Iterable) :过滤函数

第二个参数为一个迭代对象
第一个参数为一个函数,依次把迭代对象中的值放入函数运算,保留函数返回结果为True的迭代值组成的filter对象
如果第一个参数为None,则返回迭代对象中值为True的迭代值组成的filter对象
filter对象可以使用lise()方法转换为列表

zip(list1,list2,listn) :把多个列表整合成一个由多个元组组成的zip对象,使用list(zip())转换为list

每个元组包含各个参数列表中的一个元素,如果参数列表中的元素个数不同,那么会取元素最少的那个列表为基准

list1=['tom','jerry','lilei']
list2=[25,23,27]
list3=[172,165]
list(zip(list1,list2,list3))

//[('tom', 25, 172), ('jerry', 23, 165)]

map(func,list1,list2,listn)

第一个参数是一个函数需要几个参数则后面传入对应数量的Iterable
map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
如果参数列表中的元素数量不同或传入的参数列表个数和定义的函数的形参个数不同会报错

排序算法

Python内置的sorted(list,func=None,reverse=False)函数可以对list进行排序:

func表示在排序之前对每个元素进行的操作
reverse表示排序方式,False表示从小到大,True表示从大到小

sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]

如按绝对值大小排序:

sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

如果是字符串排序,默认情况下,是按照ASCII大小比较的,由于'Z' < 'a',大写字母Z会排在小写字母a的前面

现在如果要求排序忽略大小写按照字母序排序,只要用一个key函数把字符串映射为忽略大小写排序即可

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

reduce(func,list)

递归传递列表中的元素到func中,使用deduce()函数必须先引入模块from functools import reduce

这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

如reduce(lambda x,y:x+y,range(1,101))可以求出从1加到100的值

但是如果要把序列[1, 3, 5, 7, 9]变换成整数13579:reduce(lambda x,y:x*10+y,[1, 3, 5, 7, 9])

这个例子本身没多大用处,但是,如果考虑到字符串str也是一个序列,配合map(),可以写出把str转换为int的函数:

def char2num(s):

return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

def str2int(s):

return reduce(lambda x, y: x * 10 + y, map(char2num, s))

也就是说,假设Python没有提供int()函数,你完全可以自己写一个把字符串转化为整数的函数,而且只需要几行代码



网址导航