011,列表2

011,列表2

 从列表中获取元素:
跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意:列表索引值是从0开始的。如以下这个列表: 
>>> member = ['', '', '', '', '']
>>> member
['', '', '', '', '']
>>> member[0]
''
>>> member[1]
''
>>> 
 如果元素“初二”想排在“初一”前面,该如何调换其位置呢?我们可以用一个中间值(临时的变量)如: 
>>> temp = member[0]
>>> member[0] = member[1]
>>> member
['', '', '', '', '']
>>> member[1] = temp
>>> member
['', '', '', '', '']
>>> 
 
从列表中删除元素,有三个方法:
remove() 
>>> member
['', '', '', '', '']
>>> member.remove('')
>>> member
['', '', '', '']
>>> 
 但如果删除一个列表里不存在的元素会如何? 
>>> member.remove('')
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    member.remove('')
ValueError: list.remove(x): x not in list
>>> 
 是的,会报错。
del 语句 
>>> member
['', '', '', '']
>>> del member[1]
>>> member
['', '', '']
>>> 
 del也可以删除整个列表,如del member那么这个列表就从内存里删掉了。

pop()
pop是从列表中取出最后一个元素,并返回给你。如:
 
>>> member.pop()
''
>>> member
['', '']
>>> 
 pop也可以作为一个变量的赋值如: 
>>> member
['', '']
>>> name = member.pop()
>>> member
['']
>>> 
 pop还可以加上一个参数,如列表的索引值: 
>>> member = ['', '', '', '', '']
>>> member
['', '', '', '', '']
>>> member.pop(1)
''
>>> member
['', '', '', '']
>>> 
 
列表分片(切片)(slice)
 利用索引值,每次我们可以从列表中获取一个元素,但如果一次性需要获取多个元素怎么办呢?利用列表切片,我们可以简单实现这个要求。如:(注意:原列表不受影响)
>>> member
['', '', '', '']
>>> member[1:3]                #切片用冒号分开,第一个数字表示起始位置,第二个数字表示结束位置
['', '']
>>> 
 如何理解起始位置和结束位置?如下图
 >>> member
['''''''']
    0        1        2        3 

列表的索引是从0开始的,切片结束位置并不包含该位置的元素,如果需要取‘初一’,‘初二’,‘初四’这三个元素(实际上是0,1,2),那么切片位置将设置为3 
 如果切片起始位置是列表的第一位即0,则可以简写,如
 
>>> member[:3]            #起始位置为第一位
['', '', '']
>>> member[1:]            #从起始位置起一直切到最后
['', '', '', '']
>>> member[:]            #拷贝整个列表。
['', '', '', '', '']
>>> 
 member[:]拷贝有大作用,如: 
>>> member2 = member[:]
>>> member2
['', '', '', '', '']
>>> 


测试题: 
 0. 下边的列表分片操作会打印什么内容?
  1. >>> list1 = [1, 3, 2, 9, 7, 8]
  2. >>> list1[2:5] 
答:[2,9,7]
 
1. 请问 list1[0] 和 list1[0:1] 一样吗?
 答:不一样。list1[0]是取一个值,list1[0:1]是取一个列表的分片。
论坛参考答案:
不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表
2. 如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做? 
答: 
list1 = [1, 3, 2, 9, 7, 8]
num = list1.pop()
list1.insert(0,num)
print (list1)
 论坛参考答案: list1.insert(0, list1.pop())
3. 有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?
答:-3只是倒数而已。如list1,0的位置对应的是1,那么-1的位置对应8,-3位置对应9
论坛参考答案:
Python 的列表很聪明,竟然支持负数索引,如图:
  
2.png 
  
正常索引是从左到右索引,负数索引是从右到左。

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

在普通的分片操作中,步长默认设置为1,表示逐个遍历元素。其实我们可以人为调整步长以达到不可告人的秘密。
  1. >>> list1[0:6:2]
  2. [1, 2, 7]
复制代码
那么依你推测,关于步长的知识点还有哪些(很多知识点都是通用的)? 
答:理解,但不知。
论坛参考答案:
1) 之前提到的“简洁”分片操作在这里有效:
  1. >>> list1[::2]
  2. [1, 2, 7]
复制代码

2) 步长不能为0,要不就走不动了:
  1. >>> list1[::0]
  2. Traceback (most recent call last):
  3.   File "<pyshell#11>", line 1, in <module>
  4.     list1[::0]
  5. ValueError: slice step cannot be zero
复制代码

3) 步长可以是负数,改变方向(从尾部开始向左走):
  1. >>> list1[::-2]
  2. [8, 9, 3]
复制代码
 
5. 课堂上小甲鱼说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢? 
答:可以。吧。。
 论坛参考答案:(比较长,有价值)
千万不可以!
  
好的,为了大家都可以弄明白这个【必须理解】的概念,我啰嗦一下:
  
上节课我们提到使用分片创建列表的拷贝,例如:
  1. >>> list1 = [1, 3, 2, 9, 7, 8]
  2. >>> list2 = list1[:]
  3. >>> list2
  4. [1, 3, 2, 9, 7, 8]
  5. >>> list3 = list1
  6. >>> list3
  7. [1, 3, 2, 9, 7, 8]
复制代码

看上去貌似一样的,对吧?但事实上呢?我们利用列表的一个小伙伴做下修改,大家看一下差别:
  1. >>> list1.sort()
  2. >>> list1
  3. [1, 2, 3, 7, 8, 9]
复制代码

看到吧,我们的list1已经从小到大排了个序,那list2和list3呢?
  1. >>> list2
  2. [1, 3, 2, 9, 7, 8]
复制代码

可以看到我们使用分片的方式得到的list2很有原则、很有格调,并不会因为list1的改变而改变,这个原理我待会儿跟大家说,我们接着看下list3:
  1. >>> list3
  2. [1, 2, 3, 7, 8, 9]
复制代码

大家可以看到了,真正的汉奸、墙头草是list3,Ta跟着list1改变了,这是为什么呢?
  
不知道大家还记不记得我们在讲解变量的时候说过,Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,呃,我还是给大家伙画个图好。
  
1.PNG 
  
这下大家应该明白了吧,在为一个固定的东西指定另一个名字的做法,只是向同一个东西增加一个新的标签而已。
原文地址:https://www.cnblogs.com/fishdm/p/3573003.html