python学习笔记(4)——list[ ]
发现个问题,python与C、JAVA等语言相比学习障碍最大差别居然在于版本更迭!这是python官方造的虐啊。。。
有时针对某问题去google答案,或者自己去博客找共性解答,会出现相互矛盾或者与你正在使用的教程相悖的地方,不知道其他人情况,我自己70%卡壳都是 py2.2与py3.0的语法结构改变!!!
想想今后还有几个月时间要与浪费声明的版本问题做斗争就头大!!!
今天是list &tuple,好吧,开始
python中有六种内建的序列:列表、元素、字符串、Unicode字符串、buffer对象和xrange对象。
六种通用序列操作:
1.索引(index)
2.切片(slice)
3.加(+)
4.乘(*)
5.检测某个元素是否属于这个序列(in或not in)
6.计算序列长度(len())
7.找出最大元素和最小元素 min()、max()
1.索引:序列中所有的元素都有编号,索引从0开始递增。使用负数索引时,python会从右边开始计数(-1指的是序列最右边的元素)
#索引格式 list[x] 、tuple[x]、str[x]
例1-创建list类表 l,并索引其元素
>>> l=['apple','micorosoft','sony']
>>> type(l)
<class 'list'>
>>> l[0]
'apple'
>>> l[2]
'sony'
>>> l[-1] #负数索引,-1 即倒1
'sony'
>>> l[-2]
'micorosoft' 例2-创建tuple类表 t,并索引其元素
>>> t=('css','java','php')
>>> type(t)
<class 'tuple'>
>>> t[0]
'css'
>>> t[-1]
'php' 例3-创建str字符串 s,并索引其元素(虽然不是‘表’,但仍可索引,只要其为‘可迭代序列’)
>>> s='abc123'
>>> type(s)
<class 'str'>
>>> s[0]
'a'
>>> s[-2]
''
>>>
#后3种序列方法再续
1 >>> a='apple'
2 >>> a[0]
3 'a'
6 >>> a[-1]
7 'e'
8 >>> type('a')
9 <class 'str'>
>>> s.pop() #字符串也属于序列,可索引,但无list、tuple类函数如 pop、append等,因为那些是人家内置的
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'pop'
#索引(index)-只是一种操作方式,它可用在“python中有六种内建的序列:列表、元素、字符串、Unicode字符串、buffer对象和xrange对象。”中的任何一种,list可以用,str也可以用,它是6种序列的"通用函数",并不局限于list()。而list自己内置的独属函数在下面
#list()方法语法:
>>> list(seq)
#参数seq可以是任何'可迭代序列',即 list()可将任何'可迭代序列'定义为list eg:
>>> s='123abc'
>>> s1=list(s)
>>> s1
['', '', '', 'a', 'b', 'c'] #参数seq也可以调用范围函数range()
>>> h=range(10)
>>> h
range(0, 10)
>>> h1=list(h)
>>> h1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #或直接定义:
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
LIST的一些内置函数规则: len 、append()、pop()、remove(obj)、del、count、sort、sorted、insert
>>> list1=['Python','Java','C','JavaScript','C#','Ruby','PHP']
>>> len(list1)
7
>>> list1[0]
'Python'
>>> list1[2]
'C'
>>> list1[-1]
'PHP' #list.append() 末尾添加元素(参数唯一) #与extend()有本质区别,append()将参数视为独立元素添加,extend()将入参列表元素解包归入目标列表。#相同:俩函数内存地址均不改变,属对原函数的修改,不是新建。
>>> list1.append('html5')
>>> list1
['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP', 'html5'] #list.pop() 默认删除末尾元素,(可指定索引号而删除指定位置元素)
>>> list1.pop()
'html5'
>>> list1
['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']
>>> list1.pop(1)
'Java'
>>> list1
['Python', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']
#附1:指定元素名的删除方法,多个同名元素 默认删除第一个
#list.remove(obj)
>>> list1.remove('C')
>>> list1
['Python', 'java', 'JavaScript', 'C#', 'Ruby', 'PHP']
#附1:del运算符 删除元素(pop为python内置函数)
#def list[x]([x:y])
>>> del list1[1]
>>> list1
['Python', 'JavaScript', 'C#', 'Ruby', 'PHP']
>>> del list1[2:4]
>>> list1
['Python', 'C', 'Ruby', 'PHP']
>>> x=['a','b']
>>> y=x
>>> y
['a', 'b']
>>> del x
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> y
['a', 'b']
#count:用于统计某个元素在列表中出现的次数
#list.count(obj)
>>> l=['a','b','b','c','d']
>>> l.count('b')
#sort对列表进行原址排序 http://www.cnblogs.com/sunny3312/archive/2017/01/07/6260472.html
>>> x=[3,1,2,7,6,9,8]
>>> x.sort()
>>> x
[1, 2, 3, 6, 7, 8, 9] #x在排序的同时已被修改,若要不改原序列而进行原址排序,可用“副本排序”
#副本排序两种方法:
1)[:]分片方法
>>> x =[4, 6, 2, 1, 7, 9]
>>> y=x[:] #注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
>>> y.sort()
>>> y
[1, 2, 4, 6, 7, 9]
>>> x
[4, 6, 2, 1, 7, 9]
2)sorted方法
sorted返回一个有序的副本,并且类型总是列表,如下:
>>> x =[4, 6, 2, 1, 7, 9]
>>> y=sorted(x) #sorted(x)生成一个副本序列,再将其排序,不改变x
>>> y
[1, 2, 4, 6, 7, 9]
>>> x
[4, 6, 2, 1, 7, 9]
#list.insert(索引号,插入元素) 指定位置插入元素,本位元素后移
>>> list1.insert(1,'java')
>>> list1
['Python', 'java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']
#把某个元素替换成别的元素,可以直接赋值给对应的索引位置
>>> list1
['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']
>>> list1[0]='css'
>>> list1
['css', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']
#list中元素类型可混合
>>> L = ['Apple', 123, True] #字符串、int、 布尔值
#表中表
>>> l=[1,2,3,['a','b'],4,5]
#取值可用l[],l[][]格式
eg:取a
>>> l[3][0]
'a'
#list可为空 []
>>> L = []
>>> len(L)
0
写到这吧,不把学习的过程都写出来了,太累了~
2.切片(slice)
用"索引"访问单个元素,可以使用"切片"操作来访问一定范围内的元素
>>> l=['a','b','c','d','e'] #0-4位
>>> l[0:3] # 切片规则: 类似左闭右开区间,即'取左不取右'
['a', 'b', 'c'] #从边界取元素,可省略边界(隐式) 边界全部写明=显式
>>> l[:3] # =l[0:3]
['a', 'b', 'c'] >>> l[2:] #=l[2:5] 虽然l只有0-4位,但由于取左不取右规则,要取最右的4位,需多取一位
#如果涉及边界取位,建议用'隐式',可防止出错
['c', 'd', 'e'] #负数取位,规则同上
>>> l[-2:-1]
['d']
>>> l[-2:]
['d', 'e'] >>> l[:] #边界全省略(隐式),相当于从开始取到结束=全部ist
['a', 'b', 'c', 'd', 'e'] #还有一个默认'隐式'的参数-步长(step length)
>>>l #默认步长=1(隐式),即每位取1元素
['a', 'b', 'c', 'd', 'e']
>>> l[0:5:2] #设定步长 :2,即每两位取一元素
['a', 'c', 'e']
>>> l[-4::2] #负索引取位规则同,但取得元素依然是正序
['b', 'd']
#步长不能为0,但可为负 即反向取位,须让开始点大于结束点
>>> l[5:2:-1]
['e', 'd'] #注:负数步长取得元素顺序是反的,而负数索引取位取得元素依然是正序。
#正、负数索引取得元素皆正序排列,要得到反向排列 须设定步长为负值。
#tuple 、str皆可切片,规则同
#小应用-反向排序
>>> l=['a', 'b', 'c', 'd', 'e']
>>> l[::-1]
['e', 'd', 'c', 'b', 'a']
#其实python有内置 反向排序函数 reverse
# list.reverse()
>>> s=[1,2,3,4,5]
>>> s.reverse()
>>> s
[5, 4, 3, 2, 1]
3.序列相加:使用加号可以对两个类型相同的序列进行连接操作:(append、extend、+=、均是在原list基础上添加,不改变目标内存地址。而唯独‘+’是创建新变量储存结果。)
#list相加
>>> a=[1,2,3]
>>> b=['a','b','c']
>>> a+b # ‘ + ’操作符 视为将结果赋予一个新建的变量,内存地址改变。想要不改变,使用‘+=’操作符,视为在原list基础上添加。
[1, 2, 3, 'a', 'b', 'c'] #tuple相加 #规则同上
>>> a=(1,2,3)
>>> b=('a','b','c')
>>> a+b
(1, 2, 3, 'a', 'b', 'c') #str相加 #规则同上
>>> a=''
>>> b='abc'
>>> a+b
'123abc' #不同类型不可相加操作
>>> a=[1,2,3]
>>> b=(1,2,3)
>>> a+b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list #可用于字符串连接
>>> 'My name '+'is '+'python'
'My name is python' #自己注意空格格式
#类比另一个“序列追加”-extend
:可以在列表末尾一次性追加另一个序列中的多个值,和连接操作符‘+’不同,extend方法是修改了被扩展的序列(调用extend方法的序列),而原始的连接操作符‘+’返回的是一个全新的列表
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a+b #连接两个list得到一个新list,但a,b各自并无变化
[1, 2, 3, 4, 5, 6]
>>> a #a还是原样
[1, 2, 3]
>>> a.extend(b) #extend 是把a改造,将b中元素追加给a,改造后的a不是原来的a.
>>> a
[1, 2, 3, 4, 5, 6] #index:用于从列表中找出某个值第一个匹配项的索引位置
#list.index(obj) 由元素名找对应索引位,若有多个同名元素,取第一个序位元素
>>> l=['a','b','c','d','e']
>>> l.index('c')
2
4.序列乘法: 使用数字n乘以一个序列会生成新的序列,在新的序列中,原来的序列将被重复n次。
>>> 'helloworld'*3
'helloworldhelloworldhelloworld'
>>> [10]*5
[10, 10, 10, 10, 10]
>>> (1,2,3)*5
(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3) #创建只占元素空间不赋值的序列,None为python内建值
>>> seq = [None] * 10
>>> seq
[None, None, None, None, None, None, None, None, None, None]
5.成员判断:可以使用in或not in运算符判断一个对象是否为某个序列的成员 #一系列python运算符参看http://python.jobbole.com/82706/ --- http://www.yiibai.com/python/python_basic_operators.html
#返回布尔值
>>> L=[1,2,3,'a','b','c']
>>> 1in L
True
>>> 'a'in L
True
>>> 'e'not in L
True #tuple类也支持此判断函数
>>> s=(1,2,3)
>>> 1in s
True
>>> 4in s
False #str类也支持此判断函数
>>> r='abc123'
>>> 'a'in r
True
>>> 'bc'in r
True
#多重嵌套判断
>>> s=[1,2,3,['a','b','c'],4,5] #二维序列
>>> 'a' in s[3]
True >>> s=[1,2,3,['a','b','c',['r1','r2']],4,5] #三维序列
>>> 'r1' in s[3][3]
True
6.长度、最大值和最小值 (len/min/max)
>>> N=[-1,5,66.7]
>>> len(N)
3
>>> min(N)
-1
>>> max(N)
66.7 >>> s=''
>>> len(s)
3
>>> min(s)
''
>>> max(s)
''
#tuple规则同,略
python学习笔记(4)——list[ ]的更多相关文章
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- python学习笔记--Django入门0 安装dangjo
经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- Pythoner | 你像从前一样的Python学习笔记
Pythoner | 你像从前一样的Python学习笔记 Pythoner
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...
随机推荐
- linux驱动之中断方式获取键值
linux驱动之中断方式获取键值 ----------------------------------------------------------------------------------- ...
- Qt Quick之StackView具体解释(2)
在"StackView具体解释(1)"中,我们学习了StackView的基本使用方法,这次呢,我们来讲delegate的定制.被管理的View的生命周期.查找View等主题. 本文 ...
- 自己动手写shell命令之ls -R1fF
ls命令的R參数代表递归的列出全部子目录中的全部文件,1表示每一行仅仅显示一个文件或目录,f表示不排序即输出.F表示在每项的输出的最后依据其文件类型对应的加上*/=>@|字符.通过c语言实现ls ...
- Bootstrap tabs 源码分析
前言: 阅读建议:去github下载一个完整dom然后把,本篇代码复制进去然后运行就好了以地址 tab组件是非常简单的一种组件,因为这是一个系列,所以就顺便看了,其实它写的这个还算不错的,很有条例,也 ...
- H264编码技术[3]
H.264的目标应用涵盖了目前大部分的视频服务,如有线电视远程监控.交互媒体.数字电视.视频会议.视频点播.流媒体服务等.H.264为解决不同应用中的网络传输的差异.定义了两层:视频编码层(VCL:V ...
- 【HDU 2010】水仙花数
http://acm.hdu.edu.cn/showproblem.php?pid=2010 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位 ...
- [翻译]NUnit--前言(一)
前言: 翻译这个系列主要是自己在学习NUnit之时看英文文档大部分能看懂但是有些还是功底不足,所以在方便自己以后再学习的时候可以快速查找,也能够加深印象以及掌握的更好.同时在搜索网上关于NUnit系列 ...
- C++中虚析构函数的作用 (转载)
转自:http://blog.csdn.net/starlee/article/details/619827 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做 ...
- IDEA UI版本取消Output窗口打印消息的条数的限制
打开IDEA的安装目录-->进入bin文件夹-->编辑idea.properties文件::修改idea.cycle.buffer.size=1024为idea.cycle.buffer. ...
- VUE学习之计算属性computed
计算属性:computed 先看一下官网的说法 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="ex ...