Python5.1.1 列表 list
从列表删除元素
三种:remove(),pop(),del。
remove()需要指定一个待删除的元素,如果输入非列表内元素则会报错:
1 >>> prize = ['特等奖','一等奖','二等奖','三等奖','阳光普照','没中奖'] 2 >>> prize.remove('没中奖') 3 >>> prize 4 ['特等奖', '一等奖', '二等奖', '三等奖', '阳光普照']
pop()会将列表中的指定元素弹出来,它的参数是一个索引值,如果不放索引值,默认弹出最后一个元素:
1 >>> prize = ['特等奖','一等奖','二等奖','三等奖','阳光普照','没中奖'] 2 >>> prize.pop(5) 3 '没中奖' 4 >>> prize 5 ['特等奖', '一等奖', '二等奖', '三等奖', '阳光普照']
del语句,直接删除这整个列表,注意它是一个语句,而不是方法或函数:
1 >>> prize = ['特等奖','一等奖','二等奖','三等奖','阳光普照','没中奖'] 2 >>> del prize 3 >>> prize 4 Traceback (most recent call last): 5 File "<pyshell#71>", line 1, in <module> 6 prize 7 NameError: name 'prize' is not defined
列表切片
切片的语法:
新列表 = 原列表[a : b : C],a是起始位置(默认是0),b是结束位置(默认是最后一位),c是步长(默认是1),似曾相识有没有
需求:将prize中的一二三等奖取出来,放到prize1里面,按照前面学的知识,可以使用“笨”方法来实现:
1 >>> prize = ['特等奖','一等奖','二等奖','三等奖','阳光普照','没中奖'] 2 >>> prize1 = [prize[1], prize[2], prize[3]] 3 >>> prize1 4 ['一等奖', '二等奖', '三等奖']
这种方法对元素很少的列表尚可,如果元素有很多个,写起来就很痛苦,这时就要用切片来实现:
1 >>> prize = [] 2 >>> for i in range(100): 3 prize.append(i) //定义一个有100个元素的列表 4 5 >>> prize 6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 7 >>> prize1 = prize[2:50] //选择一个范围,冒号前面是起始位置,后面是结束位置,右边开区间(不包含) 8 >>> prize1 9 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
其实定义一个含有100个元素的列表也不用这么麻烦,直接使用list()函数即可:
1 >>> prize = list(range(100)) 2 >>> prize 3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
做切片的时候,也可以省去其中一些参数,比如[:],[2:],[:11],省区的就按默认值算:
1 >>> prize1 = prize[90:] //默认从第90位到结束 2 >>> prize1 3 [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 4 >>> prize2 = prize[:11] //默认从开头到第11位 5 >>> prize2 6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 7 >>> prize3 = prize[:] //这里省去了两个参数,就意味着可以拷贝一个元素完全一样的列表出来 8 >>> prize3 9 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
步长参数可以控制切片的步长,看看效果:
1 >>> prize = list(range(10)) 2 >>> prize 3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 4 >>> prize[2:10:2] //如果只想间隔取数,还可以直接prize[::2] 5 [2, 4, 6, 8]
步长还可以为负值:
1 >>> prize[::-1] 2 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] //元素顺序倒了过来
这些切片的操作都是生成一个列表切片,原始列表无任何变化,但是,如果对切片进行赋值和删除操作的话,原始列表就会受影响。(有些类似sql的view?)
1 >>> prize = list(range(10)) 2 >>> prize 3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 4 >>> prize[1:3] = ['one','two'] //对切片赋值 5 >>> prize 6 [0, 'one', 'two', 3, 4, 5, 6, 7, 8, 9] //原始列表发生了变化
1 >>> prize = list(range(10)) 2 >>> prize 3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 4 >>> del prize[1:3] //对切片删除 5 >>> prize 6 [0, 3, 4, 5, 6, 7, 8, 9] //原始列表被删除了两个元素
列表与操作符
对于列表,也可以使用操作符,比如使用+号拼接,使用*号重复,和字符串类似。还有in和not in操作符,可以判断某个元素是否在列表内,但是只能穿透一层,如果有子列表,则查不到。
使用in可以是此案列表去重:
1 >>> prize = ['特等奖','一等奖','二等奖','三等奖','四等奖','四等奖','一等奖','没中奖'] 2 >>> prize1 = [] 3 >>> for i in prize: 4 if i not in prize1: 5 prize1.append(i) 6 7 >>> prize1 8 ['特等奖', '一等奖', '二等奖', '三等奖', '四等奖', '没中奖']
列表其它操作
1 >>> dir(list) 2 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
常用的几个:
count()统计某个元素在列表中出现的次数,参数是元素
index()返回某个元素在列表中第一次出现的索引值。
reverse()是顺序反过来
sort()是排序,倒序是sort(reverse = True)
本文来自博客园,作者:巴拉拉没多少能量,转载请注明原文链接:https://www.cnblogs.com/beishi/p/15770442.html