之前在做毕业设计的时候随手写过python中“:”的作用,即python的切片操作。

记得刚开始学切片这一节的时候,看完之后,做了作业,感觉记忆深刻。学到后面很多地方都可以用到切片,这时候切片早已被我忘得一干二净。

冒号: 用于定义分片、步长。

a[ : n]表示从第0个元素到第n个元素(不包括n),a[1: ] 表示该列表中的第1个元素到最后一个元素。

list1[:3:2],tul1[3:6:2](注意3:6是索引第3至5,不包含6)

L[2] 读取列表中第三个元素,也即第2个元素

L[-2] 读取列表中倒数第二个元素

L[1:] 从第二个元素开始截取列表

list1 = [1,2,3,4,5] print list1 print list1[:-1] 输出结果: [1, 2, 3, 4, 5] [1, 2, 3, 4]

L=list(range(10)) L1=L[0:3] #从索引0开始取,直到索引3为止,但不包括索引3 #运行结果:[0, 1, 2] L2=L[:3] #如果第一个索引是0,还可以省略 #运行结果:[0, 1, 2] L3=L[:-1] #Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,倒数第一个元素的索引是-1 #运行结果:[0, 1, 2, 3, 4, 5, 6, 7, 8] L4=L[1:8:2] #前8个数,每两个取一个 #运行结果:[1, 3, 5, 7] L5=L[::-1] #倒叙取每一个数 #运行结果:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] L6=L[:] #只写[:]就可以原样复制一个list #运行结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

python创建二维列表list_2d = [[0 for col in range(cols)] for row in range(rows)]

>>> list_2d = [ [0 for i in range(5)] for i in range(4)] >>> list_2d[0].append(3) >>> list_2d[0].append(5) >>> list_2d[2].append(7) >>> list_2d 结果为[[0, 0, 0, 0, 0, 3, 5], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 7], [0, 0, 0, 0, 0]]

range() 函数可创建一个整数列表,一般用在 for 循环中。

函数语法

range(start, stop[, step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)

stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

倒序

>>> range(100,19,-5)

结果:[100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20]

xrange不想写了.....以后有时间再整理吧......

part 1 查找

names_class2 = ['张三', '李四', '王五', '赵六'] print(names_class2[2]) # print(names_class2[0:3]) # print(names_class2[0:7]) # print(names_class2[-1]) # print(names_class2[2:3]) # print(names_class2[0:3:1]) # print(names_class2[3:0:-1]) # print(names_class2[:])

part 2 增(append insert)

insert 方法用于将对象插入到列表中,而append方法则用于在列表末尾追加新的对象

names_class2.append('alex') names_class2.insert(2,'alvin') print(names_class2)

part 3 重新赋值

1 names_class2=['张三','李四','王五','赵六'] 2 3 names_class2[3]='赵七' 4 names_class2[0:2]=['wusir','alvin'] 5 print(names_class2)

part 4 删(remove,del,pop)

1 names_class2.remove('alex') 2 del names_class2[0] 3 del names_class2 4 names_class2.pop()#注意,pop是有一个返回值的

part 5 其它

5.1 count

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to') >>> x = [[1,2], 1, 1, [2, 1, [1, 2]]] >>> x.count(1) >>> x.count([1,2])

5.2 extend

1 >>> a = [1, 2, 3] 2 >>> b = [4, 5, 6] 3 >>> a.extend(b) 4 >>> a 5 [1, 2, 3, 4, 5, 6]

extend 方法修改了被扩展的列表,而原始的连接操作(+)则不然,它会返回一个全新的列表。

>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6] >>> >>> a + b [1, 2, 3, 4, 5, 6, 4, 5, 6] >>> a [1, 2, 3, 4, 5, 6]

names_class2.index('李四')

names_class2.reverse() print(names_class2)

x = [4, 6, 2, 1, 7, 9] x.sort() #x.sort(reverse=True)

现在,大家先不要理会什么是深浅拷贝,听我说,对于一个列表,我想复制一份怎么办呢?

肯定会有同学说,重新赋值呗:

names_class1=['张三','李四','王五','赵六'] names_class1_copy=['张三','李四','王五','赵六']

这是两块独立的内存空间

这也没问题,还是那句话,如果列表内容做够大,你真的可以要每一个元素都重新写一遍吗?当然不啦,所以列表里为我们内置了copy方法:

names_class1=['张三','李四','王五','赵六',[1,2,3]] names_class1_copy=names_class1.copy() names_class1[0]='zhangsan' print(names_class1) print(names_class1_copy) ############ names_class1[4][2]=5 print(names_class1) print(names_class1_copy) #问题来了,为什么names_class1_copy,从这一点我们可以断定,这两个变量并不是完全独立的,那他们的关系是什么呢?为什么有的改变,有的不改变呢?

这里就涉及到我们要讲的深浅拷贝了:

#不可变数据类型:数字,字符串,元组 可变类型:列表,字典 # l=[2,2,3] # print(id(l)) # l[0]=5 # print(id(l)) # 当你对可变类型进行修改时,比如这个列表对象l,它的内存地址不会变化,注意是这个列表对象l,不是它里面的元素 # # this is the most important # # s='alex' # print(id(s)) #像字符串,列表,数字这些不可变数据类型,,是不能修改的,比如我想要一个'Alex'的字符串,只能重新创建一个'Alex'的对象,然后让指针只想这个新对象 # # s[0]='e' #报错 # print(id(s)) #重点:浅拷贝 a=[[1,2],3,4] b=a[:]#b=a.copy() print(a,b) print(id(a),id(b)) print('*************') print('a[0]:',id(a[0]),'b[0]:',id(b[0])) print('a[0][0]:',id(a[0][0]),'b[0][0]:',id(b[0][0])) print('a[0][1]:',id(a[0][1]),'b[0][1]:',id(b[0][1])) print('a[1]:',id(a[1]),'b[1]:',id(b[1])) print('a[2]:',id(a[2]),'b[2]:',id(b[2])) print('___________________________________________') b[0][0]=8 print(a,b) print(id(a),id(b)) print('*************') print('a[0]:',id(a[0]),'b[0]:',id(b[0])) print('a[0][0]:',id(a[0][0]),'b[0][0]:',id(b[0][0])) print('a[0][1]:',id(a[0][1]),'b[0][1]:',id(b[0][1])) print('a[1]:',id(a[1]),'b[1]:',id(b[1])) print('a[2]:',id(a[2]),'b[2]:',id(b[2]))

对该结果的解释

--------------------------------------------------------------------------------------------------------

应用练习

#利用切片操作,实现一个trim()函数,去除字符串首尾的空格 def trim(s): while s[:1]==' ': #while循环判断第一个元素是否为空 s=s[1:] #为空的话将第一个元素截取 while s[-1:]==' ': #while循环判断最后一个元素是否为空 s=s[:-1] #为空的话将最后一个元素截取 return s

#回数是指从左向右读和从右向左读都是一样的数,例如12321,909。利用filter()筛选出回数: def is_palindrome(n): if str(n)==str(n)[::-1]: #判断从左向右读和从右向左读是否都是一样的数 return n print(list(filter(is_palindrome,list(range(100)))))

python步骤切片_python中的切片操作相关推荐

  1. python pandas 数据库_Python中pandas函数操作数据库

    一:创建链接数据库引擎 Python from sqlalchemy import create_engine engine= create_engine('postgresql://user@58. ...

  2. python numpy矩阵_python中numpy矩阵运算操作大全(非常全)!

    用vuejs实现一个todolist项目 用vue.js实现一个todolist项目:input输入框输入的值会呈现在下方,并且会保存在localStorage里面,而且下方的列表点击之后也会有变化: ...

  3. 8 list切片_Python中14个切片操作,你常用哪几个?

    切片(Slice)是一个取部分元素的操作,是Python中特有的功能.它可以操作list.tuple.字符串. Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作.切片操作的三个参 ...

  4. python切片是什么意思_python中的切片是什么?(实例解析)

    在以下的文章之中我们来了解一下什么是python中的切片.了解一下python中的切片是什么意思,以及切片在python之中能起到什么样的作用. 取一个list或tuple的部分元素是在python编 ...

  5. ajax返回list怎么取值_Python中的切片应该怎么用?!

    在昨天分享字符串反转的Python实现方法时,我们提到过Python的切片以及切片函数,今天我们就花时间来介绍下Python的切片. 先看一个具体的例子,假如现在有一个列表:list_a = [2,3 ...

  6. python模块xlwt怎么用不了_python中使用 xlwt 操作excel的常见方法与问题

    前言 python可以操作excel的模块不止一种,我习惯使用的写入模块是xlwt(一般都是读写模块分开的) python中使用xlwt操作excel非常方,和Java使用调框架apache poi相 ...

  7. python db文件_python中查看.db文件中表格的名字及表格中的字段操作

    1.问题描述: 我桌面上有一个"账号密码.db"文件,我现在想知道里面有几张表格table.表格的名字.表头结构. 2.使用SQL语句"""selec ...

  8. bool python 运算_python中的布尔操作

    点击以下链接可以快速访问全部我发表的Python相关文章: Nick WU:Nick WU的python文章目录(持续更新中...)​zhuanlan.zhihu.com 1. Python中的布尔值 ...

  9. python字典在编程中的作用_python中的字典操作及字典函数

    字典 dict_fruit = {'apple':'苹果','banana':'香蕉','cherry':'樱桃','avocado':'牛油果','watermelon':'西瓜'} 字典的操作 # ...

最新文章

  1. szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法
  2. Fxx and game hdu 5945 单调队列dp
  3. ASP.NET中常用的文件上传下载方法
  4. c语言函数调用参数太少,调用input_message的参数太少在主函数中 是神马意思 大神们帮帮我...
  5. shell对文本进行操作命令
  6. php培训12.22
  7. Mac平台上OpenCV开发环境搭建
  8. C++ 堆区和栈区的区别
  9. Pytorch1.7.1与SimpleITK2.0.0在centos7上终端运行冲突的情况
  10. nlp任务分类及适用方法
  11. Spring设置定时器配置
  12. 解决华硕笔记本自带触摸板的二指及三指失效的问题
  13. java打包apk_APK打包流程
  14. AUTOCAD——超级填充命令3
  15. java软件工程师工作业绩_java软件工程师的工作描述怎么写
  16. 你有必要不沾计算机一段时间英语,2014新人教版八年级英语下册第一单元必背词组及句子...
  17. 数据中台在企业数字化转型中的践行(下篇)
  18. GreatSQL配置到系统systemd服务
  19. SQL查询表结构相同的两张表中数据的差异
  20. Systrace 流畅性实战 2 :案例分析: MIUI 桌面滑动卡顿分析

热门文章

  1. 应用神经网络相关pre-processing(预处理 )
  2. 【机器学习】广义回归神经网络(GRNN)的python实现
  3. bootstraptable 加载完成回调函数_牛皮了!头一次见有大佬把「JavaScript中的回调函数」详解得如此清晰明了...
  4. 不需要英语的计算机行业,北京评职称不再考外语计算机 将涉及300多万人
  5. go和python组合开发_Go+Python双语言混合开发
  6. 控制图的绘制步骤_实战!脚手架排布图绘制步骤和技巧讲解!图文展示
  7. [转]Java NIO通俗易懂简明教程
  8. 【BZOJ1475】方格取数 [最小割]
  9. [支付宝]手机网站支付快速接入
  10. LeetCode Interleaving String