zoukankan      html  css  js  c++  java
  • Python list 数据类型:列表

    列表与字典(还没接触到)是Python中两个主要的数据类型。他们可以被修改,可以增长可以缩短,也可以嵌套。

    列表   list

    列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。

    Python 的列表与C语言中的数组访问方法相同,通过偏移地址访问。

    下面举几个列表的例子,图片来自《Python学习手册(第三版)》

    image_thumb5[1]

    为了加速进度以及方便查询,我们看一下对列表常用操作的整理,图片来自《Python学习手册(第三版)》

    image_thumb7[1]

    现在我们详细讲一下几个list的操作。

    首先我们明确,Python的list可以容纳任何对象。不管他是什么格式的。

    1)创建list

    创建列表的操作非常简单,只要用中括号报过一系列逗号分隔的值就可以了。就像第一个图片上那样。

    2)list 切片

    定义新列表后,我们可以列表中的任何一个部分作为新的列表,该技术在dive in python 中称为切片。

    让我们直接看程序。

    a_list =['a','b','c','d','e','f']    # 创建一个列表
    print a_list[1:3]                   # 在屏幕上打印一个切片

    值得注意的是,在list偏移访问中,与C中数组类似,同样用a_list[0]表示列表第一项。

    上面的程序我们得到了如下的结果:

    image_thumb
    b c 分别是列表中第二,第三个元素,序号应该是1 和2 ,可以看出,对于 a_list[x,y] 的切片,切片片段为序号x到y-1之间的内容。

    我们也可以截取半段,让我们看程序

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']   #                  定义
    print a_list[:3]                                   
    print a_list[3:]

    image_thumb2

    从结果中我们可以看出,第一个片段[:3] 取的是从第一位到第三位的片段,而[3:] 获取的是从第四位,到结尾的片段。

    无论列表多长[:n]片段中总含有n个元素。

    如果将x,y都留空,那么程序将取列表内全部的元素,但是却获得了一个新的列表。

    如果x , y中有负数怎么办,让我们来看一下

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']   
    print a_list[-1:3]                    
    print a_list[3:-1]

    image_thumb3

    第一个print输出了空的list, 第二个却输出了两个。 认真看我们可以看出,负数是指从右往左数,正数是指,从左往右。

    3)向列表list中添加元素

    从第三题中,我们认识到append可以向list中添加元素。

    a_list.append('NEW')

    让我们测试一下这句话.

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']
    a_list.append('NEW')
    print a_list

    image_thumb5

    字符串 NEW 已经被添加到该列表结尾处了.

    当然除了append 这种只能在末尾添加 元素 的操作来说,我们还要插入操作

    a_list.insert( n,35434)

    insert 后面有两个操作符, 那么n表示插入哪个元素之后, 那串数表示插入什么东西,当然任何类型的都可以,让我们试一下这个新认识的方法.

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']
    a_list.insert(2,'NEW')
    print a_list
    a_list.insert(6,43223452)
    print a_list
    image_thumb6

    可以看到,插入位置是n号元素之前。

    这两种操作都是单个元素插入,当我们需要将大量数据放在列表末尾的时候,我们就需要另一个新的方法了。

    a_list.extend( [ 'fdaf',342 ] )

    看一下例子就好了.

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']
    a_list.extend( [ 'fdaf',342 ] )
    print a_list

    image_thumb7

    当然我们还有更简单的在末尾扩增list的方法.

    +

    没错,就是一个符号.

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']
    a_list+=[ 'fdaf',342 ]
    print a_list

    image_thumb8

    看,我们得到了相同的结果!

    4)在列表中查询

    在C语言中,遍历数组什么的是常见的问题,我们需要知道,数组中有没有某个元素,某个元素在数组中的什么位置,某个元素在数组中出现的次数 等等等。这些也许在C中需要长篇累牍的描述算法,但是Python丰富的库资源已经把这些问题解决了。让我们看看下面的表吧:

    a_list.count(  'NEW' )     #计算出现次数
    a_list.index( 'NEW' )        #寻找第一次出现的位置
    'NEW' in a_list        #确认元素是否出现在list中

    现在我们测试一下这几种功能。

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']
    print a_list.count(  'NEW' )     #计算出现次数
    print 'NEW' in a_list        #确认元素是否出现在list中

    image_thumb9

    我们没有测试index,因为index 有个比较有趣的现象,让我们来试一下。

    # 位置     1   2   3   4   5   6    7
    # 序号     0   1   2   3   4   5    6
    a_list =['a','b','c','d','e','f','NEW']
    print a_list.index(  'NEW' )

    image_thumb10

    list中存在NEW,返回了正确的值。如果没有NEW会怎么样的呢

    # 位置     1   2   3   4   5   6
    # 序号     0   1   2   3   4   5
    a_list =['a','b','c','d','e','f']
    print a_list.index(  'NEW' )

    image_thumb11

    竟然提示错误,当然,这个就是引发了一个异常。之后我们会渐渐认识到这个做法的好处。

    5)从列表中删除元素

    既然我们插入了元素,那么我们也可以删除他,但是,元素的插入与删除并不像C语言那么麻烦,删除操作是如此的简单,大家看下例子就会了。

    当我们知道元素的确切位置的时候,我们使用

    del a_list[n]

    当我们不知道位置,而是知道删除什么的时候,使用:

    a_list.remove(    )

    与求元素准确位置一样,如果删除一个list中不存在的元素会引发程序错误。

    最后我们确认一点,空列表的布尔值为False,其他的列表均为Ture。

  • 相关阅读:
    对测试集进行测试,只提供了思路,程序是不能用的
    对每块训练集的前99000数据训练,后1000数据集进行测试
    loosalike数据拆分
    我的腾讯looksalike解题思路
    one-hot encoding 对于一个特征包含多个特征id的一种处理方法
    ValueError: Cannot feed value of shape ..
    滴滴面试总结
    Lintcode Digit Counts
    【lintcode】Count of Smaller Number before itself
    lintcode Sliding Window Median
  • 原文地址:https://www.cnblogs.com/Kaysin/p/2909402.html
Copyright © 2011-2022 走看看