python对列表list操作

list

list相当于js中的array. array能做的事情, 差不多list都可以做到, 比如什么可变性,删除,添加,转变为字符串等基本操作

list方法如何声明一个list

lists = [1,2,3,4,5] 

列表生成式
使用list comprehension.即,在括号里面使用 for statement. 实际上, 就是一个list 派生出另外一个list. 看一个demo

>>> lists = [x for x in range(10)]
>>> lists
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range就是用来生成一个iterable

补充:
range(start, stop[, step]) -> range object
具体含义就是born 一定范围的值. 比如range(10): 0~10.
回到 list comprehension, 这个表达式x for x in range(10) 实际上, 就相当于

lists = []
for x in range(10):
   lists.append(x)

list常用的三个函数 len,max,min

  • len()

用来获取list的长度

>>> len(lists)
5
  • max(list|Numbers)

用来判断list中,最大的数字.

>>> max(lists)
5
>>> max(1,2,3,4,5)
5
  • min(list|Numbers)

用来判断list中,最小的数字

>>> min(lists)
1
>>> min(1,2,3,4,5)
1

python中的两个特性 切片, 迭代

  • 切片

通常,我们想要获取list中的某个元素,直接使用下标即可.但是,如果你想要取出list中间连续的几个,那么就会用到切片这一神奇的功能.

>>> my_list = ['p','r','o','g','r','a','m']
>>> my_list[2:5]    # elements 3rd to 5th
['o', 'g', 'r']
>>> my_list[:-5]    # 可以使用负数的index
['p', 'r', 'o', 'g']
>>> my_list[5:]     # 从5一直到最末
['a', 'm', 'i', 'z']
>>> my_list[:]      # 获取所有的ele
['p', 'r', 'o', 'g', 'r', 'a', 'm']
  • 迭代

实际上,这里的迭代,我们理解为for…in…循环就好.如下格式

for v in len:
   print(v)

lists = [[1,2],[2,3]]
for [a,b] in lists:
    print(a,b)

list常用操作:

  • 添加

+

我们使用+, 来对list进行扩展.但实际上,他并不会修改原始的list。 所以这就有点尴尬了

>>> lists+[1]
[1, 2, 3, 4, 5, 1]

*

使用*进行翻倍扩展.但,同样不会改变原值

>>> lists * 2
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

append

这里就是向list中,尾加一个元素

>>> lists.append(1)

extend

用来向list中,添加多个元素,他和+操作的区别就是, +不会改变原始的list,而extend会!

>>> lists.extend([1,2,3,4])

insert

用来往指定index后添加一个元素.

>>> lists.insert(0,123)
>>> lists.insert(0,[1,23])
  • 切片

使用切片,来对list直接修改.

>>> lists[1:3]=[1,2,3]  //只能使用另外一个list进行替代
>>> lists
[1, 1, 2, 3, 4, 5]

这里简要说一下分片的原理吧. 分片实际上是,内部创建一个list,然后进行替换, 所以,对应的类型只能是list. 比如下面, 就会报错

>>> lists[1:3]=1
TypeError: can only assign an iterable
  • 删除

list里面的移除也是有很多讲究的, 常用的方法有pop,remove,del,clear

pop

这里,我们就要将list理解为一个栈(Ps:一种数据结果). 他的结果就是先进后出(FILO).
相当于一个瓶子,你最后放的,会被最先拿出来. 实际上, 他和append是完全相反的. append->入栈 pop->出栈
使用pop时, 他会返回被删除的元素

>>> lists = [1,2,3,4]
>>> lists.pop()
4
>>> lists
[1, 2, 3]

我们对比看一下,append

>>> lists.append(4)
>>> lists
[1, 2, 3, 4]

pop还可以用来删除指定index的ele.

//删除第一个元素
>>> lists.pop(0)

remove

remove是用来移除指定值. 并且,一次只会移除一个

>>> lists = [1,2,3,1,1,1]
>>> lists.remove(1)
>>> lists
[1, 3, 1, 1, 1]

del&& clear

前面说了pop,用来删除最新的栈元素, 但是我怎么删除list中最先放入, 也就是 list[0]的元素呢?
一个是用remove()造一个trick. 或者上面的pop例子


>>> lists.remove(lists[0])
>>> lists.pop(0)

不过使用remove的可读性超级差(pop的还可以), 所以, 我们可以使用 python中的内置函数, del 进行删除

del lists[0]

我们如果想删除list的所有元素的话, 直接刚他. 使用clear()即可.

>>> lists.clear()
>>> lists
[]
  • 排序操作
    实际上, 这应该算是一切算法的根源了, 算法做的工作就是筛选和排序. 在list中,提供了两个方法供我们选择 sort, reverse.

reverse()

实际上就是倒叙, 将你现在的list的顺序,逆向一遍

>>> lists
[1, 2, 3, 4]
>>> lists.reverse()
>>> lists
[4, 3, 2, 1]
sort([fn])

sort

他根据fn的返回值来判断你原来顺序中的大小. fn接受两个参数fn(pre,next). 代表按照顺序的list的相邻两个元素.

fn>0: 则保持现在的顺序

fn<0: 交换两者顺序继续比较

fn=0: 保留两者的顺序

你可以自定义函数, 也可以直接使用默认的从小到大的排列. 即:

>>> lists = [1,3,2,4,2,3]
>>> lists.sort()
>>> lists
[1, 2, 2, 3, 3, 4]

注意:
sort本身自带了两个参数,可以用来决定排列的顺序: key,reverse

>>> lists=['ss','sss','s','ss']
>>> lists.sort(key=len)
>>> lists
['s', 'ss', 'ss', 'sss']

或者指明使用reverse=True

>>> lists=['ss','sss','s','ss']
>>> lists.sort(reverse=True)
>>> lists
['sss', 'ss', 'ss', 's']

当然, 如果你不想对原来的list进行改变, 可以使用sorted方法,返回一个新的list进行相关操作.
我们使用,help(sorted)来看一下具体用法

sorted(iterable, key=None, reverse=False)
    Return a new list containing all items from the iterable in ascending order.

同样, 他默认情况下也是升序表示

>>> lists
[5, 4, 3, 2, 1]
>>> sorted(lists)
[1, 2, 3, 4, 5]

同样,你也可以使用reverse和key进行相关指定. 同,list这里就不赘述了.

  • 查询

index(ele)

用来查找具体ele,在list中的序号,没有则会出现ValueError的错误.具体表达式为:

L.index(value, [start, [stop]])

count(ele)

用来统计具体ele在list中出现的次数.

>>> lists.count(2)
1

当然, 如果有同学相到, in 关键字能否实现这个查询的功能呢?答案 is yes!!!
即, 我们判断一个ele 是否存在于list 可以使用in 来判断

>>> if 1 in lists:
...     print(1)
... 
1
//或者使用index
>>> if lists.index(1):
     print(1)
1

这都是完全行得通的

  • 复制
    分片

如果你想复制一个list最快的方法就是使用分片. 即

>>> lists
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> newOne = lists[0:3]
>>> newOne
[0, 1, 2]

copy()

newOne = lists.copy();
//或者使用
newOne = lists[:]
  • 额外方法

除了上面说了的max,min,list等转换方法外, python 内置的还有sum,all,any.

sum()

返回 list中所有元素之和

sum(lists)

all()

是为了判断,lists中所有元素通过bool(ele)之后都为True,则返回True,所以,当list元素中有’’,0,[]的话,则会返回False。另外,如果list为空的话,返回的也是True

any()

使用bool(ele) 判断list中的每一个元素, 如果有一个为ture的话, 返回True, 相当于或的意思,如果list为空的话返回的是False

>>> lists
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> any(lists)
True
>>> all(lists)  //存在0
False
>>> lists = []
>>> any(lists) //没有元素,不通过
False
>>> all(lists)  //没有元素,通过
True

为您推荐:
四种存储结构

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值