发现个问题,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指的是序列最右边的元素)

  1. #索引格式 list[x] 、tuple[x]、str[x]
  2. 1-创建list类表 l,并索引其元素
  3. >>> l=['apple','micorosoft','sony']
  4. >>> type(l)
  5. <class 'list'>
  6. >>> l[0]
  7. 'apple'
  8. >>> l[2]
  9. 'sony'
  10. >>> l[-1] #负数索引,-1 即倒1
  11. 'sony'
  12. >>> l[-2]
  13. 'micorosoft'
  14.  
  15. 2-创建tuple类表 t,并索引其元素
  16. >>> t=('css','java','php')
  17. >>> type(t)
  18. <class 'tuple'>
  19. >>> t[0]
  20. 'css'
  21. >>> t[-1]
  22. 'php'
  23.  
  24. 3-创建str字符串 s,并索引其元素(虽然不是‘表’,但仍可索引,只要其为‘可迭代序列’)
  25. >>> s='abc123'
    >>> type(s)
    <class 'str'>
  26. >>> s[0]
  27. 'a'
  28. >>> s[-2]
  29. ''
  30. >>>
  31. #后3种序列方法再续
  1. 1 >>> a='apple'
    2 >>> a[0]
  2. 3 'a'
  3. 6 >>> a[-1]
  4. 7 'e'
  5. 8 >>> type('a')
  6. 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自己内置的独属函数在下面

  1. #list()方法语法:
  2. >>> list(seq)
  3. #参数seq可以是任何'可迭代序列',即 list()可将任何'可迭代序列'定义为list
  4.  
  5. eg:
  6. >>> s='123abc'
  7. >>> s1=list(s)
  8. >>> s1
  9. ['', '', '', 'a', 'b', 'c']
  10.  
  11. #参数seq也可以调用范围函数range()
  12. >>> h=range(10)
  13. >>> h
  14. range(0, 10)
  15. >>> h1=list(h)
  16. >>> h1
  17. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  18.  
  19. #或直接定义:
  20. >>> list(range(10))
  21. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

LIST的一些内置函数规则:  len 、append()、pop()、remove(obj)、del、count、sort、sorted、insert

  1. >>> list1=['Python','Java','C','JavaScript','C#','Ruby','PHP']
    >>> len(list1)
    7
  2. >>> list1[0]
  3. 'Python'
  4. >>> list1[2]
  5. 'C'
  6. >>> list1[-1]
  7. 'PHP'
  8.  
  9. #list.append() 末尾添加元素(参数唯一) #与extend()有本质区别,append()将参数视为独立元素添加,extend()将入参列表元素解包归入目标列表。#相同:俩函数内存地址均不改变,属对原函数的修改,不是新建。
  10. >>> list1.append('html5')
  11. >>> list1
  12. ['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP', 'html5']
  13.  
  14. #list.pop() 默认删除末尾元素,(可指定索引号而删除指定位置元素)
  15. >>> list1.pop()
  16. 'html5'
  17. >>> list1
  18. ['Python', 'Java', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']
  19. >>> list1.pop(1)
  20. 'Java'
  21. >>> list1
  22. ['Python', 'C', 'JavaScript', 'C#', 'Ruby', 'PHP']
  23. #附1:指定元素名的删除方法,多个同名元素 默认删除第一个
  24. #list.remove(obj)
    >>> list1.remove('C')
  25. >>> list1
  26. ['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']
  1. >>> x=['a','b']
  2. >>> y=x
  3. >>> y
  4. ['a', 'b']
  5. >>> del x
  6. >>> x
  7. Traceback (most recent call last):
  8. File "<stdin>", line 1, in <module>
  9. NameError: name 'x' is not defined
  10. >>> y
  11. ['a', 'b']
  1.  

#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)

用"索引"访问单个元素,可以使用"切片"操作来访问一定范围内的元素

  1. >>> l=['a','b','c','d','e'] #0-4位
  2. >>> l[0:3] # 切片规则: 类似左闭右开区间,即'取左不取右'
  3. ['a', 'b', 'c']
  4.  
  5. #从边界取元素,可省略边界(隐式) 边界全部写明=显式
  6. >>> l[:3] # =l[0:3]
  7. ['a', 'b', 'c']
  8.  
  9. >>> l[2:] #=l[2:5] 虽然l只有0-4位,但由于取左不取右规则,要取最右的4位,需多取一位
  10.         #如果涉及边界取位,建议用'隐式',可防止出错
  11. ['c', 'd', 'e']
  12.  
  13. #负数取位,规则同上
  14. >>> l[-2:-1]
  15. ['d']
  16. >>> l[-2:]
  17. ['d', 'e']
  18.  
  19. >>> l[:] #边界全省略(隐式),相当于从开始取到结束=全部ist
  20. ['a', 'b', 'c', 'd', 'e']
  21.  
  22. #还有一个默认'隐式'的参数-步长(step length)
  23. >>>l #默认步长=1(隐式),即每位取1元素
  24. ['a', 'b', 'c', 'd', 'e']
  25. >>> l[0:5:2] #设定步长 :2,即每两位取一元素
  26. ['a', 'c', 'e']
  27. >>> l[-4::2] #负索引取位规则同,但取得元素依然是正序
  28. ['b', 'd']
  29. #步长不能为0,但可为负 即反向取位,须让开始点大于结束点
  30. >>> l[5:2:-1]
  31. ['e', 'd'] #注:负数步长取得元素顺序是反的,而负数索引取位取得元素依然是正序。
    #正、负数索引取得元素皆正序排列,要得到反向排列 须设定步长为负值。
  32. #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基础上添加,不改变目标内存地址。而唯独‘+’是创建新变量储存结果。)

  1. #list相加
  2. >>> a=[1,2,3]
  3. >>> b=['a','b','c']
  4. >>> a+b     # ‘ + ’操作符 视为将结果赋予一个新建的变量,内存地址改变。想要不改变,使用‘+=’操作符,视为在原list基础上添加。
  5. [1, 2, 3, 'a', 'b', 'c']
  6.  
  7. #tuple相加   #规则同上
  8. >>> a=(1,2,3)
  9. >>> b=('a','b','c')
  10. >>> a+b
  11. (1, 2, 3, 'a', 'b', 'c')
  12.  
  13. #str相加   #规则同上
  14. >>> a=''
  15. >>> b='abc'
  16. >>> a+b
  17. '123abc'
  18.  
  19. #不同类型不可相加操作
  20. >>> a=[1,2,3]
  21. >>> b=(1,2,3)
  22. >>> a+b
  23. Traceback (most recent call last):
  24. File "<stdin>", line 1, in <module>
  25. TypeError: can only concatenate list (not "tuple") to list
  26.  
  27. #可用于字符串连接
    >>> '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]
  28.  
  29. #index:用于从列表中找出某个值第一个匹配项的索引位置
    #list.index(obj) 由元素名找对应索引位,若有多个同名元素,取第一个序位元素
    >>> l=['a','b','c','d','e']
    >>> l.index('c')
    2

4.序列乘法: 使用数字n乘以一个序列会生成新的序列,在新的序列中,原来的序列将被重复n次。

  1. >>> 'helloworld'*3
  2. 'helloworldhelloworldhelloworld'
  3. >>> [10]*5
  4. [10, 10, 10, 10, 10]
  5. >>> (1,2,3)*5
  6. (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
  7.  
  8. #创建只占元素空间不赋值的序列,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

  1. #返回布尔值
  2. >>> L=[1,2,3,'a','b','c']
  3. >>> 1in L
  4. True
  5. >>> 'a'in L
  6. True
  7. >>> 'e'not in L
  8. True
  9.  
  10. #tuple类也支持此判断函数
  11. >>> s=(1,2,3)
  12. >>> 1in s
  13. True
  14. >>> 4in s
  15. False
  16.  
  17. #str类也支持此判断函数
  18. >>> r='abc123'
  19. >>> 'a'in r
  20. True
  21. >>> 'bc'in r
  22. True
    #多重嵌套判断
    >>> s=[1,2,3,['a','b','c'],4,5] #二维序列
    >>> 'a' in s[3]
    True
  23.  
  24. >>> s=[1,2,3,['a','b','c',['r1','r2']],4,5] #三维序列
    >>> 'r1' in s[3][3]
    True

6.长度、最大值和最小值 (len/min/max)

  1. >>> N=[-1,5,66.7]
  2. >>> len(N)
  3. 3
  4. >>> min(N)
  5. -1
  6. >>> max(N)
  7. 66.7
  8.  
  9. >>> s=''
  10. >>> len(s)
  11. 3
  12. >>> min(s)
  13. ''
  14. >>> max(s)
  15. ''
  16. #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. Samba.conf案例 Ubuntu

    # Sample configuration file for the Samba suite for Debian GNU/Linux.## This is the main Samba confi ...

  2. git fetch 和 git pull 的差别

    Git中从远程的分支获取最新的版本号到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本号到本地,不会自己主动merge git fetch origin master git ...

  3. vue全局注册与局部注册的写法

    vue全局注册是每个实例化的vue都可以使用,而局部则是实例化注册的那个可以用.举个例子,看看写法: <div id="app"> <p>页面载入时,inp ...

  4. oracle initialization or shutdown in progress 问题解决

    今天登录oracle时遇到oracle initialization or shutdown in progress 这个错误提示,在网上搜了下,试了非常多方法,最后结合几种方法结合,成功攻克了问题! ...

  5. EJB之JPA

    在前一篇文章中大概了解了EJB是什么?那么接下来就进一步介绍一下它与JPA有什么样的关系?及什么是JPA?JPA怎样用? 一.是什么? 第一次听说JPA是在EJB视屏中,所以一直感觉他们有不解的渊源. ...

  6. 跟踪oracle中sql语句运行过程及相关知识拓展

    select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这种方 ...

  7. Swift 1.1语言第7章 函数和闭包

    Swift 1.1语言第7章  函数和闭包 在编程中,随着处理问题的越来越复杂.代码量飞速添加. 当中,大量的代码往往相互反复或者近似反复.假设不採有效方式加以解决.代码将非常难维护. 为了解决问题, ...

  8. 【Dairy】2016.10.30 BirthdayParty

    今天又有人生日耶,鹏哥和骥哥两兄弟,Happy Birthday 开始听到这件事,我傻逼的想了一下,咦,这两人这么有缘,同一天生日...脑抽了... 小胖犇极缓音调来了首烟花易冷,劲啊! 发张什么图呢 ...

  9. POJ2686 Traveling by Stagecoach 状态压缩DP

    POJ2686 比较简单的 状态压缩DP 注意DP方程转移时,新的状态必然数值上小于当前状态,故最外层循环为状态从大到小即可. #include <cstdio> #include < ...

  10. codeforces round #428 div2

    A:暴力模拟,能加就加,如果累计到了8就加上,每次累积 #include<bits/stdc++.h> using namespace std; int main() { ; scanf( ...