想学python的小伙伴推荐看廖雪峰前辈的网站
希望我的博文可以让你更有趣的记住这些函数。
一、何为list
python中,可以使用list储存数据。list对于其他语言中储存数据的数组而言就显得比较随便了。
这就好比去吃自助,C和JAVA中的数组吃啥得先说好了,说吃肉你胆敢夹一筷子菜当场不干了。而list就不一样了,你可以把想把什么塞入它嘴中就可以塞什么,而且可以想什么时候塞就什么时候塞,就是这么为所欲为。
>>> list1 = [0, 1, 'list', [5,6,7]] # 一个list中可存放不同的类型
作为随便的存储数据的容器,自然有增删改查等基本功能。除此之外python还有一系列强大的函数来支持你更方便的使用list。
1. 增加元素
最基本的增加元素的方法莫过于直接向一个list中插入了。
1. insert(n, obj)
第一个参数就是在第几个索引之前插入,第二个是插入什么。这两个参数一个都不能省略的。
>>> list1 = ['b', 'c']
>>> list1.insert(0, 'a')
>>> list1
['a', 'b', 'c']
这两句话就是在list1的0号索引,也就是’b’之前插入’a’。注意,这里是在0号索引之前插入。一定要记住这个之前。
那如果我想在最后插入数据怎么办呢?只需要使用负数索引即可,-1即为倒数第一个,以此类推。
>>> list1.insert(-1, 'd')
>>> list1
['a', 'b', 'c', 'd']
倘若我只想在list最后添加,有没有更方便的方法呢?
2. append(obj)
这个方法自动将数据插入list的末尾。
>>> list1.append('e')
>>> list1
['a', 'b', 'c', 'd', 'e']
这两个添加的方法很方便,但是都比较实诚。实诚就实诚在你给什么它就把这个东西原封不动的塞入列表中,就像这样。
>>> list1.append(['f', 'g'])
>>> list1
['a', 'b', 'c', 'd', 'e', ['f', 'g']]
这就好比你想吃一个蛋糕,那可以交给这两个函数,但是你要想吃一烤箱蛋糕,那建议先拔掉烤箱的电源再交给它们。
那有没有可以把一个列表中的元素一个一个塞入原本列表的函数呢?有的。
3. extend(iterable)
这个参数就比较讲究,必须是可迭代对象。可迭代对象什么意思呢,简单说来就是可以拆成一个一个小蛋糕。详细可以参照廖雪峰前辈的网站。
>>> list1.extend(['f', 'g'])
>>> list1
['a', 'b', 'c', 'd', 'e', 'f', 'g']
4. ‘+’ 号和 ‘*’ 号
>>> list1 = [1, 2, 3]
>>> list2 = [4, 5, 6]
>>> list3 = list1 + list2
>>> list3
[1, 2, 3, 4, 5, 6]
加号和extend效果近似,但是建议使用extend,尤其是在复制大量数据时,因为加号需要将所有对象赋值到一个新的列表(即这里的list3),这是很消耗资源的。
除了加法,python还支持乘法符号。
>>> list1 = [1, 2]
>>> list2 = list1 * 2
>>> list2
[1, 2, 1, 2]
这个乘法只是简单的将list中元素重复几遍。比如:
>>> list1 = [[1, 2], [3, 4]]
>>> list2 = list1 * 2
>>> list2
[[1, 2], [3, 4], [1, 2], [3, 4]]
2. 删除元素
删除元素首先要知道删除啥,要么知道删除的内容是啥,要么得知道删除第几个。
1. remove(obj)
这个函数是删除列表中的哪个元素。
>>> list1 = [1, 2, 3, 2, 1]
>>> list1.remove(2)
>>> list1
[1, 3, 2, 1] # 只删除了第一个2
remove()只删除第一个匹配到的元素,删完就走,根本不关心后面的元素,本质上来说和渣男是一样的。
如果想要删除所有匹配的元素的话,在循环里写个判断就好了。
那如果我只知道第几个怎么办呢?
2. del
>>> list1 = [1, 3, 2, 1]
>>> del list1[0] # 将list1第一个元素删除
>>> list1
[3, 2, 1]
3. clear()
删除元素,自然也可以把整个列表都清空掉。
>>> list1.clear()
>>> list1
[]
4. pop(n)
这个删除元素比较特殊,它将一个列表看成一个栈,它按照栈的后来先出原则,从列表最后元素开始进行删除。参数n表示删除几个元素。
>>> list1 = [1, 2, 3, 4]
>>> a = list1.pop(2) # 参数为2表示将最后两个删除
>>> list1
[1, 2]
>>> a # a存放的是倒数第二个,即最后出栈的元素
3
3. 修改元素
修改元素找到索引替换就可以了。这就像要求一个列表将家中的保险柜换成另一个保险柜一样,它不关心现在的保险柜里放的是钱还是TNT,这么一想也还挺危险的。
>>> list1 = [0, 0, 0, 0]
>>> list1[0:1] = [1, 1]
>>> list1
[1, 1, 0, 0]
>>> list1[0:1] = [[1,2],[3,4]] # 这里不检查是否和原来元素一样
>>> list1
[[1,2], [3,4], 0, 0]
4. 查找元素
查找这件事本质上就是看一看列表里有没有这个东西,所以可以分为三种,第一种关心在不在就可以了,第二种得知道有几个,最后一个还要把藏在哪也找出来。
1. in
将返回在和不在这两个信息,多用在if
判断语句中。
>>> list1 = [1, 2, 3]
>>> 5 in list1
False
2. count(obj)
这个函数就是并不满足于看看有没有,还要仔细瞅一瞅有几个这样的元素。参数就是要查的数据对象。
>>> list1 = [1, 2, 3, 1, 1]
>>> list1.count(1)
3
3. index(obj)
这个函数充分学习了remove
函数渣男品质,只负责第一个匹配到的数据,对于剩下的不管不顾。
>>> list1 = [1, 2, 3, 2, 1]
>>>list1.index(2) # 只查找第一个
1
到这里基本上python的列表就已经能够进行一些基本的操作了。为了更方便的使用,这里介绍了一些常用的函数。
5. 进阶的函数
1. len()
得到列表长度的函数,这里就不多介绍了。
>>> list1 = [1, 2, 3]
>>> len(list1)
3
2. sort(key=None, reverse=False)
这里的key意思为排序的规则,reverse表示正序和反序。
key的排序规则是什么意思呢?比如一群孩子的语数外成绩放在一个列表中,怎么评出成绩呢?有的孩子提出按照数学成绩来,有的提出按照体重来,有的提出按照拳头来。而这些规则(通常是一个函数)作为key的参数。
reverse默认为升序,True为降序。
>>> list1 = [1, -2, 10, -5, -1, -100]
>>> list1.sort() # 默认排序方式
>>> list1
[-100, -5, -2, -1, 1, 10]
>>> list1.sort(key=abs) # 按照绝对值后的成绩进行排序
>>> list1
[-1, 1, -2, -5, 10, -100]
补充:在python中还有一个排序函数sorted()
。此两种函数区别在何处呢?
sort()
为列表的函数,其为list专用(甚至tuple也不可用),故其调用方式为list.sort()
。sorted()
函数适用于所有可迭代对象。故使用方式为sorted(obj, key=None, reverse=False)
3. max, min
求最大值最小值的函数,这里就不多赘述了。
>>> list1 = [1, 5, 6, 3]
>>> max(list1)
6
4. enumerate()
可以同时给出序号和数值。在for
循环中经常使用到。
list1 = ['a', 'b', 'c']
for i, value in enumerate(list1):
print(i, value)
0 a
1 b
2 c
二、何为tuple
不同于随便的列表,元组就非常正经,它一旦创建便不可修改,并且创建时必须赋值完毕。简单来说就是不可修改的list。
>>> tuple1 = (1, 'a', (1, 2))
那么我要你干嘛呢?
tuple好就好在因为不可修改的特性导致它很安全。
但也因为不可修改的特性导致其只能使用list查这一类的方法。具体而言是不能使用任何在原本数据基础上修改的函数,只能使用拥有返回值的函数(加号和乘号也可使用)。
在本文中可用的函数有+
, *
, in
, count(obj)
, index(obj)
, len(obj)
, sorted()
, max
, min
, enumerate()
。
用法同list。
若因疏忽导致本文有错误,或者对这篇文章有任何想法,欢迎发送邮件到 wangbendaner@qq.com。一经采纳,必有重谢。