设为首页 收藏本站
查看: 1082|回复: 0

[经验分享] Python【二】:列表与元祖

[复制链接]
累计签到:77 天
连续签到:1 天
发表于 2014-8-14 08:35:18 | 显示全部楼层 |阅读模式
  在简单了解了Python的基本语法之后,今天来学习Python的数据结构——序列,类似于C中的数组,元素按顺序组成一个集合,每个元素都有一个标号作为坐标,仍旧从0开始计数,-1表示最后一个元素,从后向前计数。

一、序列的基本操作
   序列其实分为两类:可以修改的称为列表(List),不能修改的称为元祖(Tuple),字符串也是一种特殊的元祖。这节主要介绍序列的通用操作,由于不涉及对于序列对象的修改,因此可以适用于列表和元祖。老样子,先看一段基础代码:


    #Sequence's Basic Operation

    #index
    x = [1, 2, 5, 7, 9, 11, 13, 21, 15, 19, 18]
    x[1] = 3
    x[-1] = x[-1] -1
    print 'Seq X is:\n' + str(x)

    #piece
    print "x[:] is: " + str(x[:])
    print "x[:3] is: " + str(x[:3])
    print "x[::2] is: " + str(x[::2])

    #add
    y = [10, 12, 14]
    print 'x+y is: ' + str(x+y)

    #multiply
    z = 'Python'
    print 'z * 5 is:

-1. 索引
    第4行的代码x=[]用来定义一个序列,由于这样定义的序列可以修改,因此实际的效果是定义了一个列表,列表中的每个元素使用','分隔,注意的是同一个列表中可以包含不同类型的元素,如x = [1, 2, 'Alice'],这点是比C的数组更为灵活的一点,事实上,可以直接使用序列包含一个子序列;
   第5行和第6行就像数组下标似的引用序列中的元素,可以修改赋值,这里的[-1]表示从序列的右侧最后一个元素开始向左计数;
   第7行要注意print可以打印数值或字符串或序列,但是拼接时,要求序列两侧必须为同一类型,所以这里使用了str()进行类型转换,即字符串+字符串,序列+序列;
-2. 分片
   第10-12行用于展示分片的作用,分片的意义在于提供了更加便捷的序列元素的选取方式,分片[m:n]的实际效果是左闭右开区间[m:n),即以序列的下标作为参照(左侧从0开始),包含第m个元素到底n-1个元素之间的元素都被分片选取了出来。省略m/n时即代表选取整个序列,其实省略哪个部分,即默认该部分从序列的相应端点开始选取。第三个参数作为步长,默认为1,我们这里修改为了2;
-3. 加法和乘法
   序列可以进行加法和乘法,加法意义为同类型序列的拼接,而乘法意义为同个序列的多次重复;
   整个的程序运行结果如下,其中序列y = [10, 12, 14]
26275986_1402284752qyIj.jpg
   序列的len\mix\max操作用于获得序列的长度和最小值/最大值。

二、列表操作
   上个部分的所有操作在不涉及元素修改的前提下都适用于列表和元祖,接下来我们来重点介绍下列表,里面会涉及元素修改的操作。按例先看个代码:



    #A Python Program for List and tuple
    import sys

    #Make a User-Passwd Login
    database = [
                ['admin', 123456],
                ['guest', 123],
                ['Tom', 'tom123'],
                ['Alice', 'alice123']
            ]
    username = raw_input("User name: ")
    passwd = input("Password: ")
    if [username, passwd] in database:
        print "Access granted!"
    else:
            print "Access denyed!"
            sys.exit()

    #After login...
    x = [3, 5, 2, 8, 9, 10, 56, 99]
    print "List X is: "
    print x
    y = x
    z = x[:]
    x.sort()
    print "List y is after x.sort(): "
    print y
    print "List z is after x.sort(): "
    print z
    y.reverse()
    print "List x after y.reverse()"
    print x

    raw_input("Please Enter for Exit...")

  •                                 raw_input("Please Enter for Exit...")
       

-1. 第2行代码首先导入了模块sys,因为我们想使用该模块下的exit()函数作为程序退出使用;
-2. 第5行定义了一个数据库,实际就是一个列表,里面含有四个子列表,每个列表都是由两个元素构成;
-3. 第11-12行用来接收用户的输入,这里有一点需要注意,即由于database中的序列资料用户名是字符串,而密码是数值,因此在用户输入时不能都是用raw_input(),那样会导致输入的数据都试字符类型,从而无法匹配数据库,这里有两种方法,一种是database中将密码字段都修改为字符串,然后都使用raw_input()函数;另一种方法是输入密码时使用input()函数;
   另一个要点是in操作,用于判断序列中是否存在该元素,返回true或false;
-4. 第13-17行代码主要用来判断用户是否合法,这里要注意Python中没有';'和{},因此代码块是依靠缩进的位置来区分的,即if应当和else位于同一个缩进列中,以表示属于并列的代码块;
-5. 第20行代码之后,主要在澄清一个问题:Python的变量其实是C++的引用,因此y = x这样的序列赋值,仅仅是为同一个序列增加了一个引用而已;如果真的想获得一个序列的副本,必须使用y = x[:]的形式才可以;
   具体的程序结果如下:
26275986_1402285395qN3J.jpg

三、列表的特有方法
   接下来我们来详细介绍一下列表的特有操作方法。由于Python是面向对象的编程语言,因此列表结构具有一些内建的方法属性。自己将这些操作和方法归结为:List类型方法、增(insert\.append\.extend)、减(del\.pop\.remove)、序(.sort\.reverse)和找(index)。
-1. 定义列表
   一般来说,定义一个序列时默认就是一个列表,如x = [1, 2, 3];对于字符串,本身是元祖,可以通过list()函数转换成列表,如:
26275986_1402292756nz3E.jpg
-2. 增加列表
   其实,增加列表有许多方法,比如利用基本的分片赋值操作、append()和extend()方法等,见程序:
26275986_1402293765UXj3.jpg
   利用分片进行插入和删除的时候需要注意分片起始范围,比如y[2:2}表示从第三个元素处进行插入后面的列表,而删除时将指定的分片范围都复制为NULL即[]就可以了;append()方法是在原列表末尾追加一个序列或元素,改动是直接体现到原有序列上的,如果append(一个新序列),则添加的序列会以子序列的形式添加到原序列中,而extend()方法则是将新的序列的元素直接延展在原有序列的尾部,形式效果如同拼接,但是直接改变了原有序列:当利用insert()方法插入序列时,必须先指定要插入的位置以及插入的序列,即insert(location, lst):
26275986_1402294349jzcG.jpg
-3. 删除序列
   删除序列的方法主要有自身的操作del以及方法pop()和remove(),其中del删除指定索引的元素,pop()删除最后一个序列元素,返回该值;remove()方法则删除从左至右匹配到的第一个元素或序列:
26275986_1402294945wrFF.jpg
   使用del操作时,必须制定要删除的元素索引,比如del a[2];当使用pop()时,类似于出栈的操作,将列表的最后一个元素删除,并且返回该元素,这是列表方法中唯一一个即修改了原序列又返回了值的方法;而remove()方法,则删除从左至右匹配到的第一个元素或序列。
-4. 排序
    列表可以使用sort()方法进行序列升序排列(默认),或使用reverse()方法进行逆序排列。

四、元祖
   元祖就是不可改变的序列,除了可以使用tuple()函数进行转换之外,也可以直接使用()来定义一个元祖x = (1, 2, 3),数值元祖则必须在数值后添加',',如y = (42,),由于元祖不可改变,所以基本的操作都是访问读取。那么为什么要有元祖呢?主要有两个原因:一是元祖可以在映射和集合的成员中当作键来使用,而列表不行;二是很多内建函数和方法的返回值是元祖,因此你必须对元祖进行处理。总之,当不改变序列值的时候,元祖就可以当作操作(列表特有的append()等方法不可用)。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23713-1-1.html 上篇帖子: Python【一】:入门 下篇帖子: Python【三】:字符串基础
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表