你可以处理列表的部分元素——Python称之为切片 。
一、使用方法:
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。
与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。
要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0 、1 和2 的元素。
如下为例子:
l = ['xiaoming', 'xiaohei', 'xiaobai', 'jaojun'] print(l[0:1]) #切片,顾头不顾尾,不包含后面的元素 print(l[:2]) #冒号前面的不写,代表从最前面0开始 print(l[1:]) #冒号后面的不写,代表从最后面结束 print(l[:]) #等同于 print(l)
二、适用范围:
只要能用下标取值的都可以用切片取值;入:字符串、元组、列表
s = 'abcdefg' print(s[:3])#结果为'abc' s2 = '1234567' print(s2[::-1])#切片的步长如果为负数,则从后往前取 7654321 print(s2[-1:-5:-2])#倒着取,隔一个一取值 结果为:75
三、关于列表内存地址的习题
#题目为移除所有奇数 li = [1,1,2,3,4,5,6,7,8,9] #下面的方法为错误方法: for i in li: if i%2!=0: li.remove(i) print(li) #打印结果为[1, 2, 4, 6, 8] #原因是:移除第一个数后,下标变了,导致下标错乱 #循环的时候不要删除list里面的元素,会导致下标错乱 #解决方法:弄两个list,循环li2,删除li1 #下面的方法为正确方法: li2 = [1,1,2,3,4,5,6,7,8,9] for i in li2: if i%2!=0: li.remove(i) print(li) #不能写成li2 = li;li里存的是内存地址,从内存地址找到对应元素;li2相当于和li内存地址相同 li2 = li#结果li和li2内存地址相同 print("li内存地址:",id(li)) print("li2内存地址:",id(li2)) li2 = li[:] #使用切片相当于生成一个新的list,内存地址不同 print("li内存地址:",id(li)) print("li2内存地址:",id(li2))
四、浅拷贝、深拷贝
l = [12,3,4] l2 = l l.append('456') l2.remove(12) print(l2) import copy stus = ['abc','xiaohei','abc2'] stus1 = stus #浅拷贝,内存地址没变 stus2 = stus[:] #深拷贝,内存地址变了,互不影响 stus3 = copy.deepcopy(stus) #深拷贝,需要引入copy模块 l1 = ['xiaoming', 'xiaohei', 'xiaobai', 'jaojun','xiaolei'] print(l1[0:6:1])#挨个取 print(l1[0:6:2])#2为步长,隔n-1个取一个