现在的位置: 首页 > 综合 > 正文

Python列表和元组的使用

2017年11月27日 ⁄ 综合 ⁄ 共 4729字 ⁄ 字号 评论关闭

列表是Python中经常使用到的内置类型之一,今天说一说Python列表的使用(示例运行环境win7+python2.7.6)

列表的创建

列表的创建有三种方法,list(),list(iterable),[],其中前两种不是很常用,下面分别介绍

list()

创建一个空列表,如下:

>>> list()
[]
>>>
>>> []
[]
>>>

list(iterable)

list(iterable),传入一个可迭代对象,返回一个列表,其中的iterable可以是字符串、列表、元组等,如下:

>>> list('abcdefg')
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> list([1,2,3,4])
[1, 2, 3, 4]
>>> list((1,2,3,4))
[1, 2, 3, 4]
>>>

空列表

var = [],将创建一个空的列表保存在变量var中,也可以有下面的写法,创建非空的列表:

>>> var = [1,2,3]
>>> var
[1, 2, 3]
>>>

列表的访问

列表常用的访问操作有索引、切片、搜索

索引

列表的索引分两种,正索引和负索引。正索引从0开始,最大下标为len(list)-1,如果索引的下标大于len(list)-1将抛出IndexError异常,如下:

>>> var = [1,2,3]
>>> var
[1, 2, 3]
>>> var[0]
1
>>> var[2]
3
>>> var[3]

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    var[3]
IndexError: list index out of range
>>>

负索引从列表尾开始,-1表示最后一个元素,-2表示倒数第二个元素,依次类推,-n表示第len(list)-n个元素,如下:

>>> var
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> var[-1]
9
>>> var[-5] == var[len(var)-5]
True
>>> var[-5]
5
>>>

切片操作

切片操作包含三个参数,list[start:end:step]start指切片的开始下标,end指切片的结束下标(切片出来的列表不包含结束下标对应的值),step指切片的步长(默认为1,通常不指定),如下:

>>> var
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> var[0:9:2]# 带三个参数,从0开始,到9结束,隔一个取一个
[1, 3, 5, 7, 9]
>>>

还有很多种简写的格式,如下:

  1. var[:5],省略开始下标和步长,相当于var[0:5:1],如下:

    >>> var
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> var[:5]
    [1, 2, 3, 4, 5]
    >>>
    >>> var[0:5:1]
    [1, 2, 3, 4, 5]
    >>>
  2. var[2:],省略结束下标和步长,相当于var[2:len(var):1],如下:

    >>> var
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> var[2:]
    [3, 4, 5, 6, 7, 8, 9]
    >>> var[2:len(var):1]
    [3, 4, 5, 6, 7, 8, 9]
    >>>
  3. var[:],切片整个列表,将返回一个与var包含相同元素的列表(拷贝),相当于var[0:len(var):1],如下:
    >>> var
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> a = var[:]
    >>> b = var[0:len(var):1]
    >>> id(var)# id不同
    30342440
    >>> id(a)# id不同
    29977896
    >>> id(b)# id不同
    30332648
    >>> a
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> b
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>>

搜索

列表的搜索包括查询某元素第一次出现的下标,判断某元素是否在列表中

    1. index(value[,start,end]),

      startend(不包括end)之间查找value第一次出现的位置,找到返回下标,未找到抛出ValueError异常。默认start0endlen(list),即在整个列表中查找。如下:

      >>> var
      [1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> var.index(4,0,len(var))
      3
      >>> var.index(4)
      3
      >>> var.index(4,0,3)
      
      Traceback (most recent call last):
        File "<pyshell#51>", line 1, in <module>
          var.index(4,0,3)
      ValueError: 4 is not in list
      >>>
    2. in

      判断某个元素是否在列表中,在返回True,不在返回False,如下:

      >>> var
      [1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> 0 in var
      False
      >>> 6 in var
      True
      >>>
    3. count

      判断某个元素是在列表中出现的次数,如下:

      >>> var
      [0, 1, 2, 0, 23, 2, 3, 4, 5, 6, 1, 7, 8, 9, 8, 6]
      >>> var.count(0)
      2
      >>> var.count(10)
      0
      >>>

列表的编辑

列表的编辑包括增加元素到列表,从列表中删除元素,修改列表中的元素等

增加元素到列表

列表增加元素有appendinsert++=**=extend,下面一一介绍:

    1. append(object)方法

      在列表尾部增加一个元素,如下:

      >>> var
      [1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> var.append(10)
      >>> var
      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      >>>
    2. insert(index, object)方法

      在指定位置插入元素,如下:

      >>> var
      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      >>> var.insert(0,0)
      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      >>>
    3. +运算符,返回一个新的列表,不改变原列表

      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      >>> a = var + [11,12]
      >>> a
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      >>>
    4. +=运算符,改变原列表

      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      >>> var += [11,12]
      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
      >>>
    5. extend(iterable)方法

      extend方法将可迭代对象的全部元素逐个添加到列表的尾部,将改变原列表,如下:

      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
      >>> var.extend([13,14])
      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
      >>>
      >>> var.extend('ABC')
      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 'A', 'B', 'C']
      >>> var.extend(('D','E','F'))
      >>> var
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 'A', 'B', 'C', 'D', 'E', 'F']
      >>>
    6. *运算符

      返回新列表,不改变原列表,如下:

      >>> var
      [1, 2]
      >>> var * 2
      [1, 2, 1, 2]
      >>> var
      [1, 2]
    7. *=运算符

      改变原列表,如下:

      var *= 2
      >>> var
      [1, 2, 1, 2]

从列表中删除元素

从列表中删除元素有三种方法,removepopdel

    1. remove(value)

      从列表头开始查找,删除第一个等于value的元素,如果直到列表尾都没有找到与value相等的元素将抛出ValueError异常,如下:

      >>> var
      [1, 2, 1, 2]
      >>> var.remove(1)
      >>> var
      [2, 1, 2]
      >>> var.remove(3)
      
      Traceback (most recent call last):
        File "<pyshell#95>", line 1, in <module>
          var.remove(3)
      ValueError: list.remove(x): x not in list
      >>>
    2. pop([index])

      弹出指定下标的元素,默认为最后一个元素,如果给定的下标不在列表下标范围内将抛出IndexError异常,如下:

      >>> var
      [2, 1, 2]
      >>> var.pop()
      2
      >>> var
      [2, 1]
      >>> var.pop(0)
      2
      >>> var
      [1]
      >>>
      >>> var.pop(1)
      
      Traceback (most recent call last):
        File "<pyshell#101>", line 1, in <module>
          var.pop(1)
      IndexError: pop index out of range
      >>>
    3. del

      >>> var
      [1, 2, 3, 4]
      >>> del var[3]
      >>> var
      [1, 2, 3]
      >>>

列表的排序

列表的排序可以使用自己的sort方法或者内置方法sorted来实现,内置sorted(iterable,cmp=None,key=None,reverse=False),将返回排序后的列表。列表方法sort(cmp=None,key=None,reverse=False)将改变原列表。两个方法相应的参数含义一样,cmp表示比较的函数(接收两个参数,返回比较结果,>,==,<),将决定谁大谁小;key为要比较的对象,即比较元素的什么字段,下例的x坐标或y坐标。如下:

>>> var
[(0, 0), (1, 5), (2, 1), (0, 1), (7, 8), (8, 8)]
>>> var.sort(key=lambda x:x[0])# 假设上述数据均为坐标,则该条语句是按x坐标升序排列
>>> var
[(0, 0), (0, 1), (1, 5), (2, 1), (7, 8), (8, 8)]
>>> var.sort(key=lambda x:x[1],reverse=True)# 按y坐标降序排列
>>> var
[(7, 8), (8, 8), (1, 5), (0, 1), (2, 1), (0, 0)]
>>>
备注:lambda定义一个简单方法,可以赋值给一个变量保存该方法,冒号前为需要传入的参数,冒号后为返回值的表达式,如下:
>>> add = lambda x,y:x+y
>>> add
<function <lambda> at 0x01D6A9B0>
>>> add(1,2)
3
>>> add(11,22)
33
>>>

与元组的比较

列表与元组有着太多的相似之处,可以说元组是不可编辑的列表。下面我们来看看两者的区别:

元组

列表

创建

tuple() -> empty tuple

list() -> new empty list

()

[]

tuple(iterable) -> tuple initialized from iterable's items

list(iterable) -> new list initialized from iterable's items

(iterable)

[iterable]

访问

相同

编辑

append,不支持

insert,不支持

extend,不支持

+,创建新实例重新赋值

+=,创建新实例重新赋值

*,创建新实例重新赋值

*=,创建新实例重新赋值

append,追加到列表尾

insert,插入元素到指定下标

extend,将一个列表的元素逐个添加到列表尾

+,创建新实例重新赋值

+=,在列表尾添加全部的元素

*,创建新实例重新赋值

*=,执行n次对自身的extend

排序

sorted,支持,返回排序后的元组

self.sort,不支持

sorted,支持,返回排序后的列表

self.sort,支持,对自身进行排序,不返回列表,将修改自身

抱歉!评论已关闭.