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)

posted @ 2022-01-06 11:44  巴拉拉没多少能量  阅读(29)  评论(0编辑  收藏  举报