发现个问题,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[ ]的更多相关文章

  1. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  2. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  3. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  4. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  5. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  6. python学习笔记--Django入门0 安装dangjo

    经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...

  7. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  8. Pythoner | 你像从前一样的Python学习笔记

    Pythoner | 你像从前一样的Python学习笔记 Pythoner

  9. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  10. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

随机推荐

  1. 009 NAT

    static nat r1(config)#ip nat inside source static 192.168.1.2 10.0.0.2 r1(config)#int f0/0 r1(config ...

  2. IE網址欄快速輸入網址,“Ctrl+Enter”補齊“.com”

    繁體中文Windows,預設 IE 在網址列輸入 abc,然後按 Ctrl+Enter ,會跳到www.abc.com.tw, 但較常用的連結是www.abc.com,如何修改这一設定呢? 可以透過修 ...

  3. jQuery异步框架探究1:jQuery._Deferred方法

    jQuery异步框架应用于jQuery数据缓存模块.jQuery ajax模块.jQuery事件绑定模块等多个模块,是jQuery的基础功能之中的一个.实际上jQuery实现的异步回调机制能够看做ja ...

  4. HTML5:理解head

    HTML文档的head部分,通常包含指定页面标题.为搜索引擎提供关于页面本身的信息.加载样式表,以及加载JavaScript文件(出于性能考虑.多数时候放在页面底部</body>标签结束前 ...

  5. ajax 跨域查看

    var CSRF_HEADER = 'X-CSRF-Token'; var setCSRFToken = function(securityToken) { jQuery.ajaxPrefilter( ...

  6. the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers.

    the largest value you actually can transmit between the client and server is determined by the amoun ...

  7. P4460 [CQOI2018]解锁屏幕

    算是我比较擅长的类型,自己想想就会了.普通小状压,状态傻子都能想出来.一开始裸的枚举T了,30.后来与处理之后跑的飞起,就是不对,还是30分.后来看讨论版...mod竟然是1e8+7!!!这不有毒吗. ...

  8. POJ3675 Telescope 圆和多边形的交

    POJ3675 用三角剖分可以轻松搞定,数据也小 随便AC. #include<iostream> #include<stdio.h> #include<stdlib.h ...

  9. uva10870

    https://vjudge.net/problem/UVA-10870 裸的矩阵快速幂 注意系数矩阵在前面 因为系数矩阵为d*d 方程矩阵为d * 1 放反了就是d * 1 d * d 不符合矩阵乘 ...

  10. mybatis批量update操作的写法,及批量update报错的问题解决方法

    mybatis的批量update操作写法很简单,如下: public interface YourMapper extends BaseMapper<YourExt> { void upd ...