《零基础入门学习Python》(11)--列表:一个打了激素的数组(二)

前言

上节课我们介绍一个打了激素的数组,叫做列表。列表我们比作一个大仓库,你所能够具现化的东西,都可以往里面扔,它包罗万象。另外还介绍了三个往列表添加元素的方法,分别是:

append(),extend()insert()

append()和extend()这两个方法都只有1个参数:

append参数是一个准备插入列表的元素.

extend参数是一个列表,它是用一个列表来扩展另一个列表

insert()方法有2个参数,第1个参数是带插入位置的索引值,第2个参数是准备插入的元素.

这个课我们接着谈一下列表常用的一些方法:

知识点

从列表中获取元素

跟数组一样,我们可以通过元素的索引值index从列表获取单个元素,注意,列表的索引值是从0开始。(但是有一个点是不一样的,这个列表可以输入负的索引值,-1想到于倒着查找)
例:

>>> member = ['小甲鱼', '小布丁', '黑夜', '怡静', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> member[0]
'小甲鱼'
>>> member[1]
'小布丁'
>>> temp = member[0]
>>> member[0] = member[1]
>>> member
['小布丁', '小布丁', '黑夜', '怡静', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> member[1] = temp
>>> member
['小布丁', '小甲鱼', '黑夜', '怡静', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> 
>>> member
['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
>>> member[-2]
'秋舞斜阳'

从列表中删除元素

  • remove()(只能删除第一个指定的值,如果后面有重复则不能删除)
>>> member.remove('怡静')
>>> member
['小布丁', '小甲鱼', '黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
  • del
>>> del member[1]
>>> member
['小布丁', '黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> del member[1]
>>> member
['小布丁', '黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> del member
>>> member
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    member
NameError: name 'member' is not defined
  • pop()
  • 因为Python的列表是利用栈数据结构进行存储的,因此有pop这个弹栈的方法。
  • pop方法是从列表中取出一个元素,并返回给你

>>> member.pop()
'Crazy迷恋'
>>> member
['小布丁', '黑夜', '葫芦娃哇', '竹林小溪']
>>> 
>>> name = member.pop()
>>> name
'竹林小溪'
>>> member
['小布丁', '黑夜', '葫芦娃哇']
>>> 
>>> member.pop(1)
'黑夜'
>>> member
['小布丁', '葫芦娃哇']
>>> 

列表分片

利用索引值,每次我们可以从列表获取一个元素,但是我们总是贪心的,如果一次性需要获取多个元素,有没有办法实现呢?利用列表分片,我们可以简单的实现这个要求。

>>> member
['小布丁', '黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> 
>>> member[1:3]
['黑夜', '葫芦娃哇']
>>> member
['小布丁', '黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> 
>>> member[:3]
['小布丁', '黑夜', '葫芦娃哇']
>>> member[:]
['小布丁', '黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> member[1:]
['黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']
>>> member2 = member[:]
>>> member2
['小布丁', '黑夜', '葫芦娃哇', '竹林小溪', 'Crazy迷恋']

课后习题

测试题

下边的列表分片操作会打印什么内容?

>>> list1 = [1,3,2,9,7,8]
>>> list1[2:5]

运行结果:
[2, 9, 7]

请问list1[0]和list1[0:1]一样吗?

不一样,list1[0]返回第0个元素的值,list1[0:1]返回一个只含有第0个元素的列表。

>>> list1[0]
1
>>> list1[0:1]
[1]
>>> 

如果你每次想从列表末尾取出一个元素,并将这个元素插入列表的最前边,你会怎么做?

>>> list1 = [1, 3, 2, 9, 7, 8]
>>> 
>>> list1.insert(0,list1.pop())
>>> list1
[8, 1, 3, 2, 9, 7]

python 的列表很聪明,支持负数索引,如图: 

正常索引是从左到右索引,负数索引是从右到左。

在进行分片的时候,我们知道分片开始和位置结束需要进行指定,但其实还有另外一个隐藏的设置:步长。

在普通的分片操作中,步长默认设置为1,表示逐个遍历元素。其实我们可以人为调整步长达到不可告人的秘密。请看以下程序:

>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[0:6:2]
[1, 2, 7]


>>> list1[::0]
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    list1[::0]
ValueError: slice step cannot be zero

>>> list1[::-2]
[8, 9, 3]

可用利用分片完成列表的拷贝list2 = list1[:],那事实上可不可以直接写成list2 = list1更加简洁呢? 

例如:

>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]
>>> list2
[1, 3, 2, 9, 7, 8]
>>> 
>>> list3 = list1
>>> list3
[1, 3, 2, 9, 7, 8]
>>> 

#看上去貌似一样。但事实上呢?我们利用列表的一个方法进行修改,看下差别:
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9]

>>> list2
[1, 3, 2, 9, 7, 8]

>>> list3
[1, 2, 3, 7, 8, 9]
>>> 

猜你喜欢

转载自blog.csdn.net/qq_38721302/article/details/82995027