zoukankan      html  css  js  c++  java
  • 序列——列表和元组

    Python包含6种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。

    1、列表和元组的主要区别在与,列表可以修改,元组则不能。

    列表如下例所示:

      >>> edward=['Edward Gumby',42]

      >>> database=[['Edward Gumby',42],['Allen',22]]

    2、通用序列操作

      所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。除此之外,Python还有计算序列长度,找出最大元素和最小元素的内建函数。

    ①索引

    序列中的所有元素都是有编号的,从0开始递增。这些元素可以通过编号分别访问,如下例所示:

      >>> greeting='Hello'

      >>>greeting=[0]

      'H'

      >>>greeting=[-1]

      'o'

    ②分片

      与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。

    示例:

      >>> tag='<a href="http://www.python.org">Python web site</a>'

      >>>tag[9:30]  #从第10个字符截取到第30个字符

      'http://www.python.org'

      >>>tag[32:-4]

      'Python web site'

    分片操作对于提取序列的一部分是很有用的。第一个索引是要提取的第一个元素的编号,而最后的索引则是分片之后剩余部分的第1个元素的编号。简而言之,分片操作的实现需要提供两个索引作为边界,第一个索引的元素是包含在分片内的,而第2个则不包含在分片内。

    #分片实例,分片和索引一样都是从0开始递增
    >>>number=[1,2,3,4,5,6,7,8,9,10]
    >>>number[3:6]
    [4,5,6]
    >>>number[0:1]
    [1]
    #假设需要访问最后几个元素,那么可以:
    >>>number[7:13]#最后一个索引超出边界的方式
    [8,9,10]
    >>>number[7:]#第二个索引不提供则任务取到最后
    [8,9,10]
    #如果想获取最后3个元素,但是不知道倒数第三个元素的索引,可以这样取:
    >>>number[-3:]
    [8,9,10]
    #但是不可以:
    >>>number[-3:0]
    []
    #但是取前3个元素可以这样:
    >>>number[0:3]
    [1,2,3]#或者
    >>>number[:3]
    [1,2,3]
    #分片还有另外一个参数:步长
    >>>number[0:10:1]
        [1,2,3,4,5,6,7,8,9,10]
    >>>number[0:10:2]
        [1,3,5,7,9]
    >>>number[::4]
        [1,5,9]
    #步长不可以是0,但是可以是负数
    >>>number[8:3:-1]
        [9,8,7,6,5]
    >>>number[10:0:-2]
        [10,8,6,4,2]
    >>>number[0:10:-2]
        []
    >>>number[::-2]
        [10,8,6,4,2]
    >>>number[:5:-2]
        [10,8]
    >>>number[5::-2
        [6,4,2]
      
    

     ③、序列相加

      通过使用加运算符可以进行序列的链接操作:

    >>>[1,2,3]+[4,5,6]
    [1,2,3,4,5,6]
    >>>'Hello,'+'world!'
    'Hello,world!'
    >>>[1,2,3]+'world!'#TypeError:会抛错;列表和字符串是无法连接在一起的,尽管它们都是序列。简单来说,两种相同类型的序列才能进行连接操作。
    

     ④、乘法

      用数字x乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重复x次。

      >>>'python'*5

      'pythonpythonpythonpythonpython'

      >>>[42]*10

      [42,42,42,42,42,42,42,42,42,42]

      ④.1、None、空列表和初始化

          空列表可以简单的通过两个中括号进行表示([])——里面什么东西都没有。如果想创建一个占用十个元素空间,却不包括任何有用内容,这个时候就需要使用None。

    None是一个Python的内建值,它的确切含义是“这里什么也没有”。因此想初始化一个长度为10的列表,可以这样实现:

       >>>seq=[None]*10

      >>>seq

      [None,None,None,None,None,None,None,None,None,None]

     ⑤、成员资格

      为了检查一个值是否在序列中,可以使用in运算符。这个运算符检查某个条件是否为真,然后返回相应的值:条件为真返回True,条件为假返回False。

     以下是一些使用了in运算的列子:

     1 >>> permissions='rw'
     2 >>>'w' in permissions
     3 True
     4 >>>'x' in permissions
     5 False
     6 >>>users=['mlh','foo','bar']
     7 >>>raw_input('Enter your user name: ') in users
     8 Enter your user name: mlh
     9 True
    10 >>>subject='$$$ Get rich now!!! $$$'
    11 >>>'$$$' in subject
    12 True

      早期的Python版本中只能检查某个字符是否存在于一个字符串中。如果尝试去检查更长的子字符串(例如'$$$'),抛错。但是从Python2.3起,in运算符也能实现这个功能了。

    #检查用户名和PIN码
    database=[
            ['albert','1234'],
            ['dilbert','4242'],
            ['smith','7524'],
            ['jones','9843']
                    ]
    username=raw_input(User name: ')
    pin=raw_input('PIN code: ')
    
    if [username,pin] in database: print 'Access granted'
    

      ⑥、长度、最小值和最大值

      内建函数len、min、max非常有用。len函数返回序列中所包含元素的数量,min函数和max函数则分别返回序列中最大和最小的元素。

    >>>numbers=[100,34,678]
    >>>len(numbers)
    3
    >>>max(numbers)
    678
    >>>min(numbers)
    34
    >>>max(2,3)
    3 >>>min(9,3,2,5) 2

     3、列表:Python的“苦力”

     3.1 list函数

      >>>list('Hello')

      ['H','e','l','l','o']

      注意,list函数适用于所有类型的序列,而不只是字符串。

      提示  可以使用''.join(somelist)将一个由字符组成的列表转换为字符串。

     3.2改变列表:元素赋值

      >>>x=[1,1,1]

      >>>x[1]=2

      >>>x

      [1,2,1]

      注意,不能为一个位置不存在的元素进行赋值。如果列表长度为2,那么不能为索引为100的元素进行赋值。

     3.3删除元素

    >>>names=['Alice','Bech','Cecil','Dee-Dee','Earl']
    >>>del names[2]
    >>>names
    ['Alice','Bech','Dee-Dee','Earl']
    

      3.4分片赋值

      程序可以一次为多个元素赋值,可以使用与原序列不等长的序列将分片替换

    >>>name=list('Perl')
    >>>name[2:]=list('ar')
    >>>name
    ['P','e','a','r']
    
    >>>name[1:]=list('ython')
    >>>name
    ['P','y','t','h','o','n']
    #分片赋值语句可以在不需要替换任何原有元素的情况插入新的元素;
    >>>numbers=[1,5]
    >>>numbers[1:1]=[2,3,4]
    >>>numbers
    [1,2,3,4,5]
    #以此类推,通过分片赋值删除元素也是可以的
    >>>numbers[1:4]=[]
    >>>numbers
    [1,5]
    #上面的例子的结果和del numbers[1:4]的一样。也可以利用1之外的步长,甚至是负数进行分片。
    
  • 相关阅读:
    OO第四次暨期末总结
    OO第九到十一次作业小结
    OO第五到七次作业小结
    OO前三次作业阶段小结
    数据预处理相关
    Latex+VScode安装
    python学习网站+查询网站
    arcgis画图中添加带箭头的直线
    在ArcGIS 中标注中竖排文字
    vs2015使用fopen时遇到unsafe问题
  • 原文地址:https://www.cnblogs.com/allen0/p/7067942.html
Copyright © 2011-2022 走看看