Python 切片 day3

你可以处理列表的部分元素——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个取一个

猜你喜欢

转载自www.cnblogs.com/candysalty/p/10974779.html
今日推荐